android - 无法访问 PreferenceActivity 创建的首选项

标签 android android-sdk-2.1 sharedpreferences preferenceactivity

我有一个最小的程序,它只是让我使用 Android 的 PreferenceActivity 设置两个首选项(一个 int 和一个 String)。所以我有一个定义我的首选项的 xml 文件,以及一个扩展 PreferenceActivity 的 Activity 。我的主要 Activity 有一个选项菜单,可以启动我的偏好 Activity 。所有这些都很好用。我可以设置我的首选项,并且在我的程序执行期间和之后保留这些值。

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

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());

...可能还有其他一些在不同上下文中(即从我的主要 Activity 访问首选项时与另一个 Activity 与不是 Activity 的类中的某些函数访问首选项时。结果总是相同的。

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

最佳答案

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

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

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

Here is a sample project显示 PreferenceActivity 的使用并获得 SharedPreferences回来。

关于android - 无法访问 PreferenceActivity 创建的首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497542/

相关文章:

android - 一个播放器在 Android 上如何异步和同时(复音)听起来?

android - 从 android SharedPreference 读取

android - 如何强制更新 expo 应用程序

android - 发送语音消息到另一个联系人号码

android - onCreate 方法中的 AsyncTask 和 setAdapter

flutter - 如何在构建方法flutter中访问共享首选项字符串

java - Android SDK SharedPreferences 的麻烦

android - Ionic Setup 开发环境

android - 使用 Intent.createChooser 使用 Waze 和谷歌地图导航显示 Waze 图标两次

android: AbsListView.OnScrollListener SCROLL_STATE_IDLE 在 SCROLL_STATE_TOUCH_SCROLL 之后不被调用(版本 2.1)