现在,在我的主要活动中,我想要检索这些首选项.应该很容易吧?这是我见过的每个样本的代码:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); int intSetting = prefs.getInt("intSetting", 0); String strSetting = prefs.getString("strSetting", "");
问题是,如果我在getInt()调用中断并且跳过,我的堆栈看起来像这样,如果我继续,应用程序将崩溃:
Thread [<3> main] (Suspended)
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord,
Intent) line: 2494
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord,
Intent) line: 2512
ActivityThread.access$2200(ActivityThread,
ActivityThread$ActivityRecord, Intent)
line: 119
ActivityThread$H.handleMessage(Message)
line: 1863
ActivityThread$H(Handler).dispatchMessage(Message)
line: 99 Looper.loop() line: 123
ActivityThread.main(String[]) line:
4363 Method.invokeNative(Object,
Object[], Class, Class[], Class, int,
boolean) line: not available [native
method] Method.invoke(Object,
Object…) line: 521
ZygoteInit$MethodAndArgsCaller.run()
line: 860 ZygoteInit.main(String[])
line: 618 NativeStart.main(String[])
line: not available [native method]
我尝试了传递给getDefaultSharedPreferences()的参数的变体,包括:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
……以及可能在不同背景下的其他一些人(即,当我从主要活动中获取偏好而不是另一个活动而不是某个非活动的某个功能时.结果总是相同的.
我已经在网上阅读了十几篇有关此问题的Q& A帖子,他们通过编写与我相同的代码解决了这个问题,所以我不指望有解决方案,但如果有人有任何想法,请告诉我.
您不显示堆栈跟踪.线程[< 3> main](Suspended)是Eclipse的无用输出.您需要检查真正的堆栈跟踪,您应该通过允许Android继续执行“强制关闭”对话框,然后查看LogCat(在您的DDMS透视图中)查看堆栈跟踪.我的猜测是你有一个名为intSetting的首选项,但它不是一个整数,但这只是猜测.关闭袖口,我想不出任何存储整数首选项的内置Preference类,因为它们主要存储字符串.
您访问默认SharedPreferences(使用此方法)的方式是正确的,不需要更改.
Here is a sample project显示了PreferenceActivity的使用并返回了SharedPreferences.