1

我有一个PreferenceActivity包含我所有应用程序偏好的。当我想在Main活动中使用这些偏好时,我使用:

prefScreen = PreferenceManager.getDefaultSharedPreferences(this);
String lang = prefScreen.getString("language_list", null);

现在,当我这样做并将我的应用程序作为第一次在设备上运行(没有缓存)运行时,它会立即崩溃。但是,如果我在活动开始时调用PreferenceActivity(使用) ,然后返回自身,它运行得很好,即使我编辑了代码并再次运行它。如果我手动清除应用程序的缓存,问题会再次发生。我应该总是在第一次运行时打电话吗?!我错过了什么吗?startActivity()MainMainPreferenceActivity

注意:我曾经Log向自己确认过这一点。在第一次运行之前,prefScreen.contains("language_list")总是等于false。我打电话后PreferenceActivity,它变成了true

4

2 回答 2

3

您必须在 Main 中调用 setDefaultValues 才能在使用前设置默认值

PreferenceManager.setDefaultValues (Context context, int resId, boolean readAgain)
于 2013-05-11T03:57:34.417 回答
1

第一次运行,首选项不存在。从您发布的内容来看,您的应用程序正在崩溃,因为您必须使用“lang”,并且在第一次调用时它将为空。

要更新首选项,您需要调用保存首选项的首选项活动(并且已经看到它可以使用它),或者在首选项 XML 文件中,您需要定义默认值并在执行任何需要首选项的任务之前调用 setDefaultValues。

希望这可以帮助。

于 2013-05-11T04:21:43.170 回答