#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()
.