![](/img/trans.png)
[英]Why doesn't the value get saved into SharedPreferences on app restart?
[英]SharedPreferences does not pass get the saved value
我正在研究部分用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類中的共享首選項始終會獲取默認值。
即使使用activity?.getPreferences("PreferencesFileName",MODE_PRIVATE)
您的context.getSharedPreferences("PreferencesFileName",MODE_PRIVATE)
應該相同。 在您的代碼中不是那樣的。
再加上一個簡單的建議,因為我不確定您是否清楚。 bla
是您的boolean
值(而非“首選項”文件名)的鍵。 我的意思是可以的,但是最好分開。
getPreferences
方法隱式使用Activity
的類Activity
為首選項文件名。 通過將"bla"
作為文件名傳遞給getSharedPreferences
您試圖從另一個文件中獲取保存的值。
如果您希望在整個應用程序中訪問相同的首選項,則可以使用具有相同文件名的getSharedPreferences
(用於寫入和讀取首選項),或者使用PreferenceManager
的getDefaultSharedPreferences
靜態方法來獲取默認的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.