내 응용 프로그램에서 xml 폴더에 설정 환경 설정을 작성하고이 메소드를 사용하여 환경 설정 관리자에게 지정했습니다. 그러나 메신저는 여기에 ....이 널 포인터 예외를 던지는 년대 된 SharedPreferences에서설정 우선 순위에서 값을 가져올 때 널 포인터 예외가 발생합니다.
public class RemindMe extends Application {
// private static final String TAG = "RemindMe";
public static SqliteServiceProvider dbHelper;
public static SQLiteDatabase db;
public static SharedPreferences sp;
public static final String TIME_OPTION = "time_option";
public static final String DATE_RANGE = "date_range";
public static final String DATE_FORMAT = "date_format";
public static final String TIME_FORMAT = "time_format";
public static final String VIBRATE_PREF = "vibrate_pref";
public static final String RINGTONE_PREF = "ringtone_pref";
public static final String DEFAULT_DATE_FORMAT = "yyyy-M-d";
@Override
public void onCreate() {
super.onCreate();
PreferenceManager.setDefaultValues(this, R.xml.settings, false);
sp = PreferenceManager.getDefaultSharedPreferences(this);
dbHelper = new SqliteServiceProvider(this);
db = dbHelper.getWritableDatabase();
}
public static boolean showRemainingTime() {
return "1".equals(sp.getString(TIME_OPTION, "0"));
}
public static int getDateRange() {
return Integer.parseInt(sp.getString(DATE_RANGE, "0"));
// return 0;
}
public static String getDateFormat() {
return sp.getString(DATE_FORMAT, DEFAULT_DATE_FORMAT);
}
public static boolean is24Hours() {
return sp.getBoolean(TIME_FORMAT, true);
}
public static boolean isVibrate() {
return sp.getBoolean(VIBRATE_PREF, true);
}
public static String getRingtone() {
return sp.getString(RINGTONE_PREF, android.provider.Settings.System.DEFAULT_NOTIFICATION_URI.toString());
}
}
을 값을 얻으려고 때하는 것은 ... 내 설정 여기
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Display Settings">
<ListPreference android:key="time_option"
android:title="Display Time"
android:summary="Actual"
android:entries="@array/time_option_arr"
android:entryValues="@array/val_arr"
android:defaultValue="0" />
<ListPreference android:key="date_range"
android:title="Date Range"
android:summary="Daily"
android:entries="@array/date_range_arr"
android:entryValues="@array/val_arr"
android:defaultValue="0" />
<ListPreference android:key="date_format"
android:title="Date Format"
android:summary="yyyy-M-d"
android:entries="@array/date_format_arr"
android:entryValues="@array/date_format_arr"
android:defaultValue="yyyy-M-d" />
<CheckBoxPreference android:key="time_format"
android:title="Time Format"
android:summary="Use 24-hour format"
android:defaultValue="true" />
</PreferenceCategory>
<PreferenceCategory android:title="Notification Settings">
<CheckBoxPreference android:key="vibrate_pref"
android:title="Vibrate"
android:summary="Vibrate on notification"
android:defaultValue="true" />
<RingtonePreference android:key="ringtone_pref"
android:title="Set Ringtone"
android:summary="Default"
android:ringtoneType="all"
android:showDefault="true"
android:showSilent="false" />
<!--Preference android:key="about_pref"
android:title="About"
android:summary="Credits" /-->
</PreferenceCategory>
</PreferenceScreen>
이 스택 트레이스입니다 preferrence입니다
치명적인 예외 : 주 java.lang.RuntimeException : 활동을 다시 시작할 수 없습니다. {info.androidhive.navigationdrawer/info.androidhive.navigationdrawer.task_classes.AddAlarmActi vity} android.app.ActivityThread.handleLaunchActivity에서 android.app.ActivityThread.handleResumeActivity (ActivityThread.java:2972) 에서 android.app.ActivityThread.performResumeActivity (ActivityThread.java:2943) 에서 java.lang.NullPointerException이 (ActivityThread.java:2407) android.app.ActivityThread.access $ 600 (ActivityThread.java:162) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1368) android.os.Handler.dispatchMessage (Handler.java:107) android.os.Looper.loop (Looper.java:194) at android.app.ActivityThread.main (ActivityThread.java:5410) at java.lang.reflect.Method.invokeNative (네이티브 메소드) at java.lang.reflect.Method.invoke (Method.java:525) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit 된 .java : 정보에 java.lang.NullPointerException이 : 833) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:600) dalvik.system.NativeStart.main (기본 방법) 에서 에서 에 의한 .androidhive.navigationdrawer.task_classes.RemindMe.getDateFormat (RemindMe.java:53) info.androidhive.navigationdrawer.task_classes.AddAlarmActivity.onResume (AddAlarmActivity.java:147)android.app.ActivityThread.performResumeActivity에서 android.app.Activity.performResume (Activity.java:5200) 에서 android.app.Instrumentation.callActivityOnResume (Instrumentation.java:1190) (ActivityThread.java:2930) 10에서 로이드에서 android.app.ActivityThread.access $ 600 (ActivityThread.java:162) 에서 android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2407) 에서 android.app.ActivityThread.handleResumeActivity (ActivityThread.java:2972) .app.ActivityThread $ H.handleMessage (ActivityThread.java:1368) android.os.Handler.dispatchMessage (Handler.java:107) android.os.Looper.loop (Looper.java:194) android.app.ActivityThread.main (ActivityThread.java:5410) at java.lang.reflect.Method.invokeNative (네이티브 메소드) at java .lang.reflect.Method.invoke (Method.java:525) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:833) at com.android.internal.os.ZygoteInit.main (ZygoteInit.자바 : dalvik.system.NativeStart.main (기본 방법 600) )
스택 트레이스는 어디에 있습니까? 읽기 [this] (http://stackoverflow.com/q/218384/2745495) 그런 다음 추적에서 직접 디버깅을 시도하십시오. NPE가 초기화를 잊어 버렸거나 올바르게 설정되지 않은 변수를 알려줍니다. –
[NPE의 링크] (http://stackoverflow.com/q/218384/2745495)를 확인 했습니까? 트레이스를 읽었을 때,'''NullPointerException..at RemindMe.getDateFormat (RemindMe.java:53)''' –