Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Can';t访问由PreferenceActivity创建的首选项_Android_Android Sdk 2.1_Sharedpreferences_Preferenceactivity - Fatal编程技术网

Android Can';t访问由PreferenceActivity创建的首选项

Android Can';t访问由PreferenceActivity创建的首选项,android,android-sdk-2.1,sharedpreferences,preferenceactivity,Android,Android Sdk 2.1,Sharedpreferences,Preferenceactivity,我有一个最小的程序,它只允许我使用Android的PreferenceActivity设置两个首选项(一个int和一个字符串)。因此,我有一个定义首选项的xml文件和一个扩展PreferenceActivity的活动。我的主要活动有一个选项菜单,用于启动我的首选项活动。所有这些都非常有效。我可以设置我的首选项,并且在程序执行期间和之后保留这些值 现在,在我的主要活动中,我想检索这些首选项。应该很容易吧?以下是我见过的每个示例的代码: SharedPreferences prefs = Prefe

我有一个最小的程序,它只允许我使用Android的
PreferenceActivity
设置两个首选项(一个int和一个字符串)。因此,我有一个定义首选项的xml文件和一个扩展
PreferenceActivity
的活动。我的主要活动有一个选项菜单,用于启动我的首选项活动。所有这些都非常有效。我可以设置我的首选项,并且在程序执行期间和之后保留这些值

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

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");
问题是,如果我在调用
getInt()
时中断并跳过,我的堆栈看起来是这样的,如果我继续,应用程序将崩溃:

线程[main](挂起)
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, 意图)行:2494
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, 意图)行:2512
ActivityThread.访问$2200(ActivityThread, ActivityThread$ActivityRecord,意图) 行:119
ActivityThread$H.handleMessage(消息) 行:1863
ActivityThread$H(处理程序).dispatchMessage(消息) 行:99 Looper.loop()行:123
ActivityThread.main(字符串[])行: 4363方法。invokenactive(对象, 对象[],类,类[],类,int, 布尔值)行:不可用[本机] 方法]方法。调用(对象, 对象…)行:521
ZygoteInit$MethodAndArgsCaller.run() 行:860 ZygoteInit.main(字符串[]) 行:618 nativestar.main(字符串[]) 行:不可用[本机方法]

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

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
…以及可能在不同上下文中的其他一些活动(即从我的主活动访问首选项时,与从其他活动访问首选项时,与从非活动类中的某些函数访问首选项时,结果总是相同的)

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

只是为了确保:

  • 在您的
    AndroidManifest
    中,您应该拥有扩展
    PreferenceActivity
    Activity
    ,如下所示:

  • 扩展
    首选项活动的
    活动
    应具有以下代码:

    @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.prefs); }

其中
R.layout.prefs
是首选项的xml


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

您不显示堆栈跟踪。
线程[main](挂起)
是Eclipse的无用输出。您需要检查真正的堆栈跟踪,您应该通过允许Android继续“强制关闭”来获得它对话框,然后查看LogCat(在DDMS透视图中)以获取堆栈跟踪

我猜您有一个名为
intSetting
的首选项,但它不是一个整数,但这只是一个猜测。即兴说来,我想不出任何内置的
preference
类会存储整数首选项,因为它们大多存储字符串

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


显示使用
PreferenceActivity
并获取
SharedReferences

它不会崩溃,即使您的首选项没有保存,我认为您丢失了一些代码,崩溃也不是从这一点开始的。您还有其他线程吗?

这就是问题所在。PreferenceActivity创建首选项的方法ences不允许我创建int设置,因此这应该是一个线索。令人失望的是,我没有收到任何有意义的消息。我被在文本字段中指定数字键盘输入数据的能力所愚弄。这让我认为它是存储为整数的,尽管它显然不是。它确实崩溃了,并且代码预处理sented是它崩溃的地方和原因。我已经说过我可以设置和保存首选项,如果没有这个代码,我不可能做到。所以不是这样。