我有一个最小的程序,只能让我使用Android设置两个偏好(一个int和string) PreferenceActivity. 。因此,我有一个定义我的偏好的XML文件,以及一个扩展的活动 PreferenceActivity. 。我的主要活动有一个选项菜单,可以启动我的偏好活动。所有这些都很好。我可以设置自己的偏好,并在程序执行过程中和之后保留值。

现在,在我的主要活动中,我想检索这些偏好。应该容易,对吗?这是我见过的每个示例的代码:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");

问题是,如果我突破 getInt() 打电话和翻阅,我的堆栈看起来像这样,如果我继续,该应用将崩溃:

线程[<3> main](暂停)
ActivityThread.performlaunchactivity(Attivation Thread $ activityRecord,Intent)行:2494
ActivityThread.HandleLaunchAcnActivity(activityThread $ ActivityRecord,Intent)行:2512
ActivityThread.Access $ 2200(ActivityThread,ActivityThread $ ActivityRecord,Intent)行:119
ActivityThread $ H.HANDLEMESSAGE(消息)行:1863
ActivityThread $ h(处理程序).disPatchMessage(消息)行:99 looper.loop()行:123
ActivityThread.main(String [])行:4363 Method.invokenative(对象,对象[],class,class [],class [class,int,boolean)行:不可用[本机方法] method.invoke(object,object,object .. 。)线:521
zygoteinit $ methodandargscaller.run()行:860 zygoteinit.main(string [])行:618 nativestart.main(string [])行:不可用[本机方法

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

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

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

我已经从其他人的网络上读了十二篇问答帖子。

有帮助吗?

解决方案

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

我的猜测是你有一个偏好 intSetting 但这不是整数,但这只是一个猜测。在袖口上,我无法想到任何内置的 Preference 可以存储整数偏好的课程,因为它们主要是存储字符串。

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

这是一个示例项目 显示使用 PreferenceActivity 并得到 SharedPreferences 背部。

其他提示

只想确认一下:

  • 在你里面 AndroidManifest 你应该有 Activity 延伸 PreferenceActivity 有这样的事情:

    <活动android:name =“。

  • Activity 延伸 PreferenceActivity 应该具有以下代码:

    @Override保护的void onCreate(捆绑savedinstancestate){super.oncreate(savedinstancestate); addPreferencesFromResource(r.layout.prefs); }

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

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

即使您的偏好没有保存,也不会崩溃,我认为您错过了一些代码,崩溃并非来自这一点。您还有其他线程吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top