【发布时间】:2011-03-30 16:17:52
【问题描述】:
我有一个最小的程序,它只是让我使用 Android 的 PreferenceActivity 设置两个首选项(一个 int 和一个 String)。所以我有一个定义我的偏好的 xml 文件,以及一个扩展 PreferenceActivity 的活动。我的主要活动有一个选项菜单,可以启动我的偏好活动。所有这些都很好。我可以设置我的偏好,并且在我的程序执行期间和之后保留这些值。
现在,在我的主要活动中,我想检索这些偏好。应该很容易吧?这是我见过的每个示例的代码:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");
问题是,如果我在 getInt() 调用中中断并跳过,我的堆栈看起来像这样,如果我继续,应用程序将崩溃:
线程 [ main](已暂停)
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, 意图)线路:2494
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, 意图)线路:2512
ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) 线路:119
ActivityThread$H.handleMessage(消息) 线路:1863
ActivityThread$H(Handler).dispatchMessage(Message) 行:99 Looper.loop() 行:123
ActivityThread.main(String[]) 行: 第4363章 对象[],类,类[],类,整数, boolean) 行:不可用 [native 方法] Method.invoke(对象, 对象...) 行:521
ZygoteInit$MethodAndArgsCaller.run() 行:860 ZygoteInit.main(String[]) 行:618 NativeStart.main(String[]) 行:不可用[本机方法]
我尝试了传递给 getDefaultSharedPreferences() 的参数的变体,包括:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
...可能还有其他一些在不同的上下文中(即,当从我的主要活动、另一个活动和非活动类中的某些函数访问首选项时。结果总是相同的。
我在网上阅读了十几篇来自其他人的问答帖子,他们通过编写与我相同的代码解决了这个问题,所以我不希望有解决方案,但如果有人有任何想法,请告诉我。
【问题讨论】:
标签: android android-sdk-2.1 sharedpreferences preferenceactivity