我正在开发部分用 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/