SharedPreferences не проходит получить сохраненное значение - PullRequest
1 голос
/ 20 июня 2019

Я работаю над проектом Android, построенным частично в kotlin и частично в java. Я пытаюсь передать информацию из класса фрагмента 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 ]

1 голос
/ 20 июня 2019

Метод 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);
1 голос
/ 20 июня 2019

Ваш context.getSharedPreferences("PreferencesFileName",MODE_PRIVATE) должен быть таким же даже при использовании activity?.getPreferences("PreferencesFileName",MODE_PRIVATE). В вашем коде это не так.

Плюс простое предложение, потому что я не уверен, ясно ли вам это. bla - это ключ для вашего значения boolean, а не имени файла настроек. Я имею в виду, что может быть, но лучше отделить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...