Хранимая переменная всегда считывается как false?

#java #kotlin #sharedpreferences

#java #kotlin #sharedpreferences

Вопрос:

У меня есть это в моем классе Java:

 public class ActionReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
        prefs.edit().putBoolean("saved", true).apply();
   }
}
  

И это в моем классе Kotlin:

   override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.mylayout)

        val prefs = getPreferences(MODE_PRIVATE)
        val saved = prefs.getBoolean("saved", false)

        System.out.println("Saved value: "   saved) // always prints false!
}
  

Последняя строка всегда печатается false , даже когда вызывается код в моем классе Java. Почему?

Ответ №1:

getPreferences() дает вам объект preferences, который ограничен контекстом, из которого вы его вызвали (на самом деле просто называя его после класса).

Используйте getSharedPreferences() или PreferenceManager.getDefaultSharedPreferences() для получения объекта, который используется глобально в вашем приложении.

В настоящее время используется ваш класс Kotlin getPreferences() , поэтому он не просматривает те же настройки, которые вы используете в своем приемнике, которые вы получили по имени getSharedPreferences() .