无法访问偏好性创建的偏好
-
29-09-2019 - |
题
我有一个最小的程序,只能让我使用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可以重现您的问题。
即使您的偏好没有保存,也不会崩溃,我认为您错过了一些代码,崩溃并非来自这一点。您还有其他线程吗?