共享首选项始终返回默认值

时间:2014-09-16 13:21:44

标签: android sharedpreferences

以下是我用于在Preference中创建和存储值的代码。 outgoing是String变量。

SharedPreferences sp = getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();                
editor.putString("PhoneNo","Hi");
editor.commit();

以下是从SharedPreference获取值的代码。

SharedPreferences sp 
=getSharedPreferences(outgoing,Activity.MODE_PRIVATE);
String calln = sp.getString("PhoneNo","0");
Toast.makeText(mContext, "SHARED"+calln,Toast.LENGTH_LONG).show();

4 个答案:

答案 0 :(得分:2)

您应该在访问它们的上下文中调用getSharedPreferences

Source

因此,根据您如何访问上下文,如果将其传递给其他活动或异步任务,以下是一些使用示例:

this.getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

context.getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

getApplicationContext().getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

此外,您可以测试自己的东西的一种方法是在SharedPreferences更改时使用监听器:

onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)

Called when a shared preference is changed, added, or removed.

here is how to do that

您还可以使用Preference Manager获取SharedPreferences

PreferenceManager.getSharedPreferences(YOUR_CONTEXT).getString(
                    "PhoneNo", "0");

或者存储它们:

PreferenceManager.getSharedPreferences(YOUR_CONTEXT).edit().putString(
                    "PhoneNo", "Hi").commit();

答案 1 :(得分:1)

将此Activity.MODE_PRIVATE更改为此Activity.MODE_MULTI_PROCESS,问题可能是由于存储价值和访问价值时的不同背景。

答案 2 :(得分:1)

在设置值时,请尝试更改此值:

SharedPreferences sp = getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

到此:

SharedPreferences sp = getApplicationContext().getSharedPreferences(outgoing, Activity.MODE_PRIVATE);

获取值时也一样 - 不要忘记在getApplicationContext()

的通话中添加SharedPreferences

编辑: 检查两个活动中的“传出”字符串是否完全相同

答案 3 :(得分:1)

共享首选项始终返回默认值的最可能原因是您将值保存在一个首选项文件中,然后尝试在另一个首选项文件中检索它。如果您从不同的活动中调用getPreferences(),则会发生这种情况,因为getPreferences()会根据创建的活动创建不同的首选项文件。

解决方案

最简单的解决方案是始终获得您的共享偏好:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);

这将为整个应用程序使用单个首选项文件。

替代解决方案

如果由于某种原因你需要使用不同的偏好文件,那么你可以

final static String PREF_FILE_1 = "pref_file_1";
...
SharedPreferences sharedPref = context.getSharedPreferences(PREF_FILE_1, Context.MODE_PRIVATE);

请确保始终使用正确的文件名作为您要保存和检索的首选项。

本地偏好

如果您确实只需要特定活动的偏好设置,那么您可以使用getPreferences(Context.MODE_PRIVATE)。只是不希望能够以相同的方式从另一个Activity中检索值。

另见