未通过SharedPreferences获取保存的值

时间:2019-06-20 07:31:38

标签: java android kotlin

我正在研究部分用Kotlin和部分用Java构建的android项目。我试图将信息从Kotlin片段类传递给Java类。我发现信息传递存在问题,因为我没有收到所需的价值。经过一些调试后,我看到信息已成功存储,但是访问共享首选项中的信息时,仅返回默认值。

这是kotlin类中的代码。单击按钮后,它将布尔变量的值更改为相反的值,将按钮的文本设置为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类中的共享首选项始终会获取默认值。

2 个答案:

答案 0 :(得分:1)

即使使用context.getSharedPreferences("PreferencesFileName",MODE_PRIVATE),您的activity?.getPreferences("PreferencesFileName",MODE_PRIVATE)也应该相同。在您的代码中并不是这样。

加上一个简单的建议,因为我不确定您是否清楚。 bla是您的boolean值的键,而不是“首选项”文件名。我的意思是可以的,但是最好分开。

答案 1 :(得分:1)

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

如果您希望在整个应用程序中访问相同的首选项,则可以将getSharedPreferences(用于写入和读取首选项)与相同文件名一起使用,或使用{ PreferenceManager的{​​3}}静态方法来获取默认的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);