2011-10-21 33 views
1

當用戶跳到我的應用程序的另一個頁面(活動)時,我需要保存我的主要活動的一些變量。官方引用(http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState)被提供做使用下面的代碼保存持久狀態:試圖保存喜好(根據官方的Android參考)導致錯誤

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(); 
    } 
} 

當我實現了這個部分代碼到我的應用程序(有點不同,而不是ed.putInt我使用ed.putBoolean)並運行它,我在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):at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2731) 10-21 15:00:42.956:ERROR/AndroidRuntime(26590):at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2678) 10- 21 15:0 0:42.956:ERROR/AndroidRuntime(26590):at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3259) 10-21 15:00:42.956:ERROR/AndroidRuntime(26590):at android.app。 ActivityThread.access $ 1600(ActivityThread.java:132)10-21 15:00:42.956:ERROR/AndroidRuntime(26590):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1042) ... 10-21 15:00:42.956:ERROR/AndroidRuntime(26590):造成者: java.lang.NullPointerException 10-21 15:00:42.956: ERROR/AndroidRuntime(26590):at com.example.android。 Soft.Commander.onPause(Commander.java:355)10-21 15:00:42.956:ERROR/AndroidRuntime(26590):at android.app.Activity.perfo rmPause(Activity.java:4032)10-21 15:00:42.956:ERROR/AndroidRuntime(26590):at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1337) 10-21 15:00:42.956 :ERROR/AndroidRuntime(26590):在 android.app.ActivityThread.performPauseActivity(ActivityThread.java:2708) 10-21 15:00:42.956:ERROR/AndroidRuntime(26590):... 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()