簡體   English   中英

未通過SharedPreferences獲取保存的值

[英]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 (用於寫入和讀取首選項),或者使用PreferenceManagergetDefaultSharedPreferences靜態方法來獲取默認的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM