java - Android 共享首选项不起作用

标签 java android android-studio android-fragments sharedpreferences

我的共享首选项有问题,出了问题,我总是得到默认值。 我的共享偏好类是:

public class IntolleranceData {

    static SharedPreferences intolleranceData;
    static SharedPreferences.Editor intolleranceEditor;

    static final String FISH_KEY="00000";
}

我通过以下方式在 Activity 中节省值(value):

intolleranceData = getApplicationContext().getSharedPreferences("intolleranceData", Context.MODE_PRIVATE);
intolleranceEditor = intolleranceData.edit();
intolleranceEditor.putString(FISH_KEY, "something").apply();
Toast.makeText(getApplicationContext(), "fish: " + intolleranceData.getString(FISH_KEY, "error"), Toast.LENGTH_LONG).show();

这很棒(toast显示正确的字符串 -“fish:something”),但是如果我尝试在 fragment 中使用共享首选项(在同一个 Activity 和 SharedPreferences 中,Activity 和 Fragment 位于同一个包中):

intolleranceData = getActivity().getSharedPreferences("intolleranceData", Context.MODE_PRIVATE);
intolleranceEditor = intolleranceData.edit();

String myKey = intolleranceData.getString(FISH_KEY,"error");
Toast.makeText(getActivity(),"fish: "+myKey,Toast.LENGTH_LONG).show();

它显示“fish: 00000”,所以这是默认值...

有什么办法可以解决我的问题吗?

最佳答案

在引用 GetActivity() 返回 SharedPreferences 之前,请尝试检查以确保 GetActivity() 不为 null。

此外,您还使用“apply()”将更改添加到 SharedPreferences,这是一个在后台运行的进程。如果您尝试过早地读取数据(例如同时),那么您通常可以获得默认值。或者,使用 .commit() 将更改保存到 SharedPreferences。

最后,如果问题与这些常见问题无关,那么在初始化 fragment 时将“getActivity().getApplicationContext()”保存到变量中,应该有助于解决上下文无法正确链接的问题!

祝你好运!

关于java - Android 共享首选项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645655/

相关文章:

java - 如果重新创建 Activity ,Android显示对话框会导致非法状态异常

java - 无法在 Android 中使用带有 Intent 的已安装媒体应用程序播放音频文件

java - Spring Security Hierarchy 角色系统

android - 键盘启动时如何设置编辑文本?

android - 从 SQLite 数据库列中获取最小值?

android - 如何使用Android Studio导出jar文件?

Android Studio 不断要求签名配置,尽管我已经有发布构建 APK

java - 使用属性文件中的条目填充 HashMap

java - 如何通过命令行列出java程序的默认和可用的线程调度程序?

java - 如何制作具有可重现版本的 Android 应用程序?