无法访问PreferenceActivity创建的首选项

时间:2010-08-16 21:31:37

标签: android android-sdk-2.1 sharedpreferences preferenceactivity

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

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

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

问题是,如果我在getInt()调用中断并跳过,我的堆栈看起来像这样,如果我继续,应用程序将崩溃:

  

线程[< 3>主要](暂停)
  ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,   意图)行:2494
  ActivityThread.handleLaunchActivity(ActivityThread $ ActivityRecord,   意图)行:2512
  ActivityThread.access $ 2200(ActivityThread,   ActivityThread $ ActivityRecord,Intent)   line:119
  ActivityThread $ H.handleMessage(消息)   行:1863年   ActivityThread $ H(处理器).dispatchMessage(消息)   line:99 Looper.loop()line:123
  ActivityThread.main(String [])行:   4363 Method.invokeNative(Object,   Object [],Class,Class [],Class,int,   boolean)line:not available [native   方法] Method.invoke(Object,   对象...)行: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());

......可能还有其他一些不同的语境(即从我的主要活动中获取偏好而非另一项活动与某个非活动类中的某些功能相比。结果始终相同。

我已经在网上阅读了其他有问题的人在网上发了十几篇Q& A帖子,他们通过编写与我相同的代码解决了这个问题,所以我不指望有解决方案,但如果有人有任何想法,那就让我吧知道。

3 个答案:

答案 0 :(得分:7)

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

我的猜测是你有一个名为intSetting的偏好,但它不是一个整数,但这只是猜测。关闭袖口,我想不出任何存储整数首选项的内置Preference类,因为它们主要存储字符串。

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

Here is a sample project显示使用PreferenceActivity并获取SharedPreferences

答案 1 :(得分:0)

只是为了确保:

  • 在你AndroidManifest中,你应该Activity扩展PreferenceActivity,如下所示:

    &LT;活动android:name =“。activities.Preferences”  机器人:标签= “@串/ APP_NAME”/&GT;

  • 扩展Activity的{​​{1}}应具有以下代码:

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

其中PreferenceActivity是您的首选项'xml。

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

答案 2 :(得分:0)

它不会崩溃,即使你没有保存你的偏好,我想你错过了一些代码而且崩溃并非来自这一点。你有其他一些线索吗?