3

我有一个最小的程序,它只是让我使用 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());

...以及可能在不同上下文中的其他一些人(即,当从我的主要活动与另一个活动与不是活动的类中的某些功能访问首选项时。结果总是相同的。

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

4

3 回答 3

8

您不显示堆栈跟踪。这Thread [<3> main] (Suspended)是 Eclipse 的无用输出。您需要检查真正的堆栈跟踪,您应该允许 Android 继续“强制关闭”对话框,然后查看 LogCat(在您的 DDMS 角度)的堆栈跟踪。

我的猜测是你有一个偏好intSetting,但它不是一个整数,但这只是一个猜测。即兴发挥,我想不出任何Preference可以存储整数首选项的内置类,因为它们主要存储字符串。

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

这是一个示例项目,展示了使用PreferenceActivity和获取SharedPreferences支持。

于 2010-08-16T21:46:10.230 回答
0

只想确认一下:

  • 在你AndroidManifest身上,你应该有Activity这样的扩展PreferenceActivity

    < 活动 android:name=".activities.Preferences" android:label="@string/app_name"/>

  • Activity扩展的PreferenceActivity应该有以下代码:

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.prefs); }

R.layout.prefs您的偏好的 xml在哪里。

如果您已经完成了这两件事,请使用您正在使用的 xml 编辑您的问题,以便 ppl 可以重现您的问题。

于 2010-08-16T21:45:25.493 回答
0

它不会崩溃,即使您的偏好没有被保存,我认为您错过了一些代码并且崩溃不是从这一点开始的。你有其他线程吗?

于 2010-08-16T23:12:42.297 回答