2016-10-29 11 views
-4

私のアプリケーションでは、xmlフォルダに設定プリファレンスを作成し、そのメソッドを使用して環境設定マネージャに割り当てました。しかし、それは、nullポインタ例外を投げSharedPreferencesから値を取得しようとイム....設定優先度から値を取得するときにNULLポインタ例外を取得する

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> 

を一般設定では、スタックトレースのとき...

致命的な例外:メイン java.lang.RuntimeException:アクティビティを再開できません{info.androidhive.navigationdrawer/info.androidhive.navigationdrawer.task_classes.AddAlarmActi VITY} android.app.ActivityThread.handleLaunchActivityでandroid.app.ActivityThread.handleResumeActivityでandroid.app.ActivityThread.performResumeActivityでjava.lang.NullPointerExceptionが (ActivityThread.java:2943) (ActivityThread.java:2972) ( 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) 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.java:600) at dalvik.system.NativeStart.main(ネイティブメソッド) 原因:java.lang.NullPointerException info .androidhive.navigationdrawer.task_classes.RemindMe.getDateFormat(RemindMe.java:53) (infoAlbumActivity.java:147) でandroid.app.Instrumentation.callActivityOnResume(Instrumentation.java:1190) android.app.Activity.performResume(Activity.java:5200) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2930) atアンドロイドで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) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:833) at com.android.internal.os.ZygoteInit.main (ZygoteInit。Javaの: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.xmlであなたのApplicationクラスの名前を追加することを忘れましたか?

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

ありがとうございました.............私はマニフェストに追加するのを忘れました。 ....それは今働いている.... –

関連する問題