java - SharedPreferences没有通过获取保存的值

标签 java android kotlin

我正在开发部分用 kotlin 构建、部分用 java 构建的 android 项目。我正在尝试将信息从 kotlin fragment 类传递到 java 类。我发现信息传递存在问题,因为我没有收到所需的值。经过一些调试后,我发现信息已成功存储,但是当访问共享首选项中的信息时,仅返回默认值。

这是 kotlin 类中的代码。单击按钮时,它将 boolean 变量的值更改为相反的值,将按钮的文本设置为 true/false 并将变量的值保存在共享首选项中。

 btnStyle.setOnClickListener() {
            styleHasChanged = !styleHasChanged;

            if(styleHasChanged  == true){
                btnStyle.setText("true")
            }else{
                btnStyle.setText("false")
            }

            val sharedPref : SharedPreferences?= activity?.getPreferences(MODE_PRIVATE);
            sharedPref?.edit()?.putBoolean("bla", styleHasChanged)?.apply()
}

这是java类。共享首选项在函数内部调用,该函数根据接收到的值选择文件路径。

 public static String getHtmlContent(Context context, String htmlContent, Config config) {

    SharedPreferences sharedPreferences = context.getSharedPreferences("bla",MODE_PRIVATE);
    boolean hasStyleChanged = sharedPreferences.getBoolean("bla", false);

    //moj
    String cssPath;


        if (!hasStyleChanged) {
            cssPath = String.format(context.getString(R.string.css_tag), "file:///android_asset/css/Style.css");
        } else {
            cssPath = String.format(context.getString(R.string.css_tag), "file:///android_asset/css/Style2.css");
        }

这就是问题出现的地方。 java 类中的共享首选项始终获取默认值,无论是否单击按钮。

最佳答案

getPreferences 方法隐式使用 Activity 的类名作为首选项文件名。通过将 "bla" 作为文件名传递给 getSharedPreferences,您将尝试从另一个文件中获取保存的值。

如果您想在应用程序中访问相同的首选项,请使用具有相同文件名的getSharedPreferences(用于写入和读取首选项),或者使用getDefaultSharedPreferences PreferenceManager 的静态方法来获取默认的 SharedPreferences 实例。

您应该将代码更改为如下所示:

val sharedPref : SharedPreferences? = activity?
        .getSharedPreferences("someFileName", MODE_PRIVATE)
sharedPref?.edit()?.putBoolean("bla", styleHasChanged)?.apply()

Java 部分:

SharedPreferences sharedPreferences = context
        .getSharedPreferences("someFileName", MODE_PRIVATE);
boolean hasStyleChanged = sharedPreferences.getBoolean("bla", false);

关于java - SharedPreferences没有通过获取保存的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56681116/

相关文章:

java - Android从python服务器中的套接字接收消息

java - arrayListOf(),sortedWith,compareBy与Java等效

java - 不明白为什么我的代码中显示以下错误: non-static variable cannot be referenced from a static context

android - 如何在平板电脑中打开数字键盘以输入类型文本

java - 什么情况下归并排序比选择排序快

android - 检索 sqlite blob 字段以放入 imageview

android - Fabric Beta 发行说明和 Gradle Kotlin DSL

java - 如何使用枚举作为接口(interface)中函数声明的参数?

java - 如何在 hibernate 中限制对象属性中的集合?

java - 我的新手代码没有减去两个变量