-4

내 응용 프로그램에서 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) )

+1

스택 트레이스는 어디에 있습니까? 읽기 [this] (http://stackoverflow.com/q/218384/2745495) 그런 다음 추적에서 직접 디버깅을 시도하십시오. NPE가 초기화를 잊어 버렸거나 올바르게 설정되지 않은 변수를 알려줍니다. –

+1

[NPE의 링크] (http://stackoverflow.com/q/218384/2745495)를 확인 했습니까? 트레이스를 읽었을 때,'''NullPointerException..at RemindMe.getDateFormat (RemindMe.java:53)''' –

답변

1

당신이 당신의 의 AndroidManifest.xmlApplication 클래스의 이름을 추가 잊으셨습니까?

<manifest 
    ... 
    <application 
     name=".RemindMe" 
    ... 
    </application> 
</manifest> 
+0

감사합니다 ............. 매니 페스트에 추가하는 것을 잊어 버렸습니다. .... 지금 일하고있어 .... –