当用户跳转到我的应用程序的另一个页面(活动)时,我需要保存我的主要活动的一些变量。官方参考 (http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState) 提供了使用以下代码保存持久状态:
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): FATAL EXCEPTION: main 10-21 15:00:42.956: ERROR/AndroidRuntime(26590): java.lang.RuntimeException: Unable to pause activity {com.example .android.Pitbul/com.example.android.Soft.Commander}:java.lang.NullPointerException 10-21 15:00:42.956:错误/AndroidRuntime(26590):在 android.app.ActivityThread.performPauseActivity(ActivityThread.java: 2731) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.ActivityThread.performPauseActivity(ActivityThread.java:2678) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3259) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.ActivityThread.access$1600(ActivityThread.java:132) 10-21 15 :00:42.956:错误/AndroidRuntime(26590):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1042) ... 10-21 15:00:42.956: ERROR/AndroidRuntime(26590): Caused by: 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.performPause(Activity.java:4032) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1337) 10-21 15:00:42.956: ERROR/AndroidRuntime(26590): at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2708) 10-21 15:00:42.956: ERROR/AndroidRuntime(26590): ... 12 更多错误/AndroidRuntime(26590): 由: java.lang.NullPointerException 10-21 15:00:42.956: 错误/AndroidRuntime(26590): at com.example.android.Soft.Commander.onPause(Commander.java:355) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.Activity.performPause(Activity.java:4032) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android. app.Instrumentation.callActivityOnPause(Instrumentation.java:1337) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.ActivityThread.performPauseActivity(ActivityThread.java:2708) 10-21 15:00: 42.956: 错误/AndroidRuntime(26590): ... 12 更多错误/AndroidRuntime(26590): 由: java.lang.NullPointerException 10-21 15:00:42.956: 错误/AndroidRuntime(26590): at com.example.android.Soft.Commander.onPause(Commander.java:355) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.Activity.performPause(Activity.java:4032) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android. app.Instrumentation.callActivityOnPause(Instrumentation.java:1337) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.ActivityThread.performPauseActivity(ActivityThread.java:2708) 10-21 15:00: 42.956: 错误/AndroidRuntime(26590): ... 12 更多错误/AndroidRuntime(26590): 在 android.app.Activity.performPause(Activity.java:4032) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.Instrumentation.callActivityOnPause(Instrumentation.java :1337)10-21 15:00:42.956:错误/AndroidRuntime(26590):在android.app.ActivityThread.performPauseActivity(ActivityThread.java:2708)10-21 15:00:42.956:错误/AndroidRuntime(26590): ... 12 更多错误/AndroidRuntime(26590): 在 android.app.Activity.performPause(Activity.java:4032) 10-21 15:00:42.956: 错误/AndroidRuntime(26590): 在 android.app.Instrumentation.callActivityOnPause(Instrumentation.java :1337)10-21 15:00:42.956:错误/AndroidRuntime(26590):在android.app.ActivityThread.performPauseActivity(ActivityThread.java:2708)10-21 15:00:42.956:错误/AndroidRuntime(26590): ... 12 更多
因此,错误发生在 SharedPreferences.Editor ed = mPrefs.edit(); 细绳。
为什么会这样?我需要什么来解决这个问题?我真的需要保存一些变量并在用户返回主活动屏幕时读取它们。