无法访问PreferenceActivity创建的首选项

Cra*_*aig 3 android preferenceactivity android-sdk-2.1 sharedpreferences

我有一个最小的程序,只是让我使用Android设置两个首选项(一个int和一个字符串)PreferenceActivity.所以我有一个定义我的首选项的xml文件,以及一个扩展的活动PreferenceActivity.我的主要活动有一个选项菜单,可以启动我的偏好活动.所有这一切都很有效.我可以设置我的首选项,并在程序执行期间和之后保留值.

现在,在我的主要活动中,我想要检索这些首选项.应该很容易吧?这是我见过的每个样本的代码:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在getInt()通话中断并且跳过,我的堆栈看起来像这样,如果我继续,应用程序将崩溃:

线程[<3>主要](已暂停)
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:not available [native method] Method.invoke(Object,Object ...)line:521
ZygoteInit $ MethodAndArgsCaller.run()行:860 ZygoteInit.main(String [])行:618 NativeStart.main(String [])行:不可用[native method]

我尝试了传递给getDefaultSharedPreferences()的参数的变体,包括:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

......以及可能在不同背景下的其他一些人(即从我的主要活动中获取偏好而不是从另一个活动中获取偏好而不是某个非活动类中的某个功能时.结果总是相同的.

我已经在网上阅读了十几篇有关此问题的问答帖,他们通过编写与我相同的代码解决了这个问题,所以我不指望有解决方案,但如果有人有任何想法,请告诉我.

Com*_*are 7

您不显示堆栈跟踪.这Thread [<3> main] (Suspended)是Eclipse的无用输出.您需要检查真正的堆栈跟踪,您应该通过允许Android继续执行"强制关闭"对话框,然后查看LogCat(在DDMS透视图中)查看堆栈跟踪.

我的猜测是你有一个名字的偏好,intSetting但它不是一个整数,但这只是一个猜测.关闭袖口,我想不出任何Preference存储整数首选项的内置类,因为它们主要存储字符串.

您访问默认SharedPreferences(使用this)的方式是正确的,不需要更改.

这是一个示例项目,显示使用PreferenceActivitySharedPreferences后退.