2011-10-21 19 views
1

ユーザが自分のアプリケーションの別のページ(アクティビティ)にジャンプしたときに、私の主なアクティビティのいくつかの変数を保存する必要があります。私はこれを実装すると環境設定を保存しようとするとエラーが発生する

public class CalendarActivity extends Activity { 
    ... 

    static final int DAY_VIEW_MODE = 0; 
    static final int WEEK_VIEW_MODE = 1; 

    private SharedPreferences mPrefs; 
    private int mCurViewMode; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     SharedPreferences mPrefs = getSharedPreferences(); 
     mCurViewMode = mPrefs.getInt("view_mode" DAY_VIEW_MODE); 
    } 

    protected void onPause() { 
     super.onPause(); 

     SharedPreferences.Editor ed = mPrefs.edit(); 
     ed.putInt("view_mode", mCurViewMode); 
     ed.commit(); 
    } 
} 

:公式リファレンスは、(http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState)次のコードを使用して永続状態を保存行うために提供されます私のアプリケーションにコードの一部(ed.putBooleanを使用してed.putIntの代わりに少し違いがある)を実行し、LOGCatでエラーが発生しました。

10-21 15:00:42.956:ERROR/AndroidRuntime(26590):致命的な例外:メイン 10-21 15:00:42.956:ERROR/AndroidRuntime(26590): java.lang.RuntimeException:アクティビティを一時停止できません。 {com.example.android.Pitbul/com.example.android.Soft.Commander}: java.lang.NullPointerException 10-21 15:00:42.956: ERROR/AndroidRuntime(26590): android.app.ActivityThread.performPauseActivity(ActivityThread.java:2731) 10-21 15:00:42.956:ERROR/AndroidRuntime(26590): android.app.ActivityThread.performPauseActivity(ActivityThread.java:2678) 10- 21 15:0 0:42.956:ERROR/AndroidRuntime(26590): android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3259) 10-21 15:00:42.956:ERROR/AndroidRuntime(26590): android.app。 ActivityThread.access $ 1600(ActivityThread.java:132)10-21 15:00:42.956:ERROR/AndroidRuntime(26590): android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1042) ... (26590): 原因:10-21 15:00:42.956: ERROR/AndroidRuntime(26590): com.example.android。 Soft.Commander.onPause(Commander.java:355)10-21 15:00:42.956:ERROR/AndroidRuntime(26590): android.app.Activity.perfo rmPause(Activity.java:4032)10-21 15:00:42.956:ERROR/AndroidRuntime(26590): android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1337) 10-21 15:00:42.956 :ERROR/AndroidRuntime(26590):00:42.956:ERROR/AndroidRuntime(26590): android.app.ActivityThread.performPauseActivity(ActivityThread.java:2708) 10-21 15における... 12より

したがって、エラーは SharedPreferences.Editor ed = mPrefs.edit();で発生します。文字列。

どうしてですか?私はこの問題を解決するために何が必要ですか?私は本当にいくつかの変数を保存し、ユーザーがメインのアクティビティ画面に戻ったときにそれを読む必要があります。

答えて

1

は、この方法のようにそれを行う:

public class CalendarActivity extends Activity { 
    ... 

    static final int DAY_VIEW_MODE = 0; 
    static final int WEEK_VIEW_MODE = 1; 

    private SharedPreferences mPrefs; 
    private int mCurViewMode; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
//other setContentView() etc. 
     mPrefs = getSharedPreferences(); 
     mCurViewMode = mPrefs.getInt("view_mode" DAY_VIEW_MODE); 
    } 

    protected void onPause() { 
     super.onPause(); 
     SharedPreferences.Editor ed = mPrefs.edit(); 
     ed.putInt("view_mode", mCurViewMode); 
     ed.commit(); 
    } 
} 

あなたは、この行に間違っている:

SharedPreferences mPrefs = getSharedPreferences(); 

をグローバル変数がどの原因を初期化できませんでしたので、それonCreate()内のローカル変数作りますNullPointerException in onPause()

関連する問題