我有一个最小的程序,它只是让我使用 Android 的PreferenceActivity
. 所以我有一个定义我的偏好的 xml 文件,以及一个扩展PreferenceActivity
. 我的主要活动有一个选项菜单,可以启动我的偏好活动。所有这些都很好。我可以设置我的偏好,并且在我的程序执行期间和之后保留这些值。
现在,在我的主要活动中,我想检索这些偏好。应该很容易吧?这是我见过的每个示例的代码:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");
问题是,如果我在getInt()
通话中中断并跳过,我的堆栈看起来像这样,如果我继续,应用程序将崩溃:
线程 [<3> main] (Suspended)
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) 行:2494
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) 行:2512
ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) 行: 119
ActivityThread$H.handleMessage(Message) 行: 1863
ActivityThread$H(Handler).dispatchMessage(Message) 行: 99 Looper.loop() 行: 123
ActivityThread.main(String[]) 行: 4363 Method.invokeNative( Object, Object[], Class, Class[], Class, int, boolean) line: 不可用 [native method] Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() 行:860 ZygoteInit.main(String[]) 行:618 NativeStart.main(String[]) 行:不可用 [本机方法]
我尝试了传递给 getDefaultSharedPreferences() 的参数的变体,包括:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
...以及可能在不同上下文中的其他一些人(即,当从我的主要活动与另一个活动与不是活动的类中的某些功能访问首选项时。结果总是相同的。
我已经在网上阅读了十几个有这个问题的人的问答帖子,他们通过编写与我相同的代码解决了这个问题,所以我不希望有解决方案,但如果有人有任何想法,请告诉我。