SharedPreferences 没有更新它的值

SharedPreferences is not updating its value

下面是我在保存设置函数 (DialogFragment) 中使用的代码片段:

String orderBy = mOrderBySpinner.getSelectedItem().toString();
String search = mSearchEditText.getText().toString().trim();

SharedPreferences sharedPreferences = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();

editor.putString(InventoryPreferences.ORDER_BY, orderBy);
editor.putString(InventoryPreferences.SEARCH_TERM, search);
editor.apply();

然后我使用以下 (Activity) 检索该数据:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
String orderBy = sharedPrefs.getString(InventoryPreferences.ORDER_BY, "name ASC");
String searchTerm = sharedPrefs.getString(
                InventoryPreferences.SEARCH_TERM,"").trim();

这些是我的钥匙:

public static final String ORDER_BY = "orderBy";
public static final String SEARCH_TERM = "search";

是否有任何原因说明当密钥相同时为什么不更新值?

getActivity().getPreferences(Context.MODE_PRIVATE);

不是

PreferenceManager.getDefaultSharedPreferences(this);

两种方法都使用第二行。

来自文档: https://developer.android.com/reference/android/app/Activity.html#getPreferences(int)

Retrieve a SharedPreferences object for accessing preferences that are private to this activity

使用 PreferenceManager 访问 SharedPreference。

您更新首选项值的代码是正确的。

考虑验证输入控件中的值是否真的改变了 并验证该应用程序是否有权写入首选项。

您正在使用两种不同的方法来访问 SharedPreferences 文件。

第一次使用 getActivity().getPreferences(Context.MODE_PRIVATE) 时,您正在调用 Activity 的 getPreferences(int mode),其中 returns 一个 SharedPreferences 对象,它应该是 [=29= 私有的] 请求它。此 SharedPreferences 对象指向的首选项文件的名称是 CLASS_NAME.xml

第二次使用PreferenceManager.getDefaultSharedPreferences(this) returns 一个 SharedPreferences 对象,它应该对整个应用程序可用且有用。此 SharedPreferences 对象指向的首选项文件的名称是 PACKAGE_NAME_preferences.xml.

所以您的问题是您使用一个文件写入首选项,而另一个文件读取它们。尝试使用更全局的思维 PreferenceManager.getDefaultSharedPreferences(Context context) 来存储与整个应用程序相关的首选项,并且仅使用 Activity.getPreferences(int mode) 来存储仅与特定 activity 相关的首选项。 (然后还要记得用合适的方法找回)