#android #android-livedata #lifecycle
#Android #android-livedata #жизненный цикл
Вопрос:
Для целей моего приложения у меня есть текущие данные, которые observesForEver
и обновляют представления. Когда я выхожу из приложения в фоновый режим и возвращаюсь на передний план, приложение выходит из строя в представлениях, которые находятся в наблюдателях.
Вот сбой:
E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.emoona.music, PID: 7897 java.lang.Исключение NullPointerException: this.titleTxt не должен быть нулевым в com.emoona.torahboxmusic.features.playmusic.playlist.Выберите playlistfragment.updateUI(SelectPlaylistFragment.kt:157) …………….
Мой код:
viewModel.globalController.music.observeForever { music ->
val music = music ?: return@observeForever
this.titleTxt.text = music.title
}
Я объявляю наблюдателя на onViewCreated
Что мне следует сделать, чтобы избежать этого сбоя? Почему представления равны нулю в наблюдателе?
Я указываю, что не хочу делать observe(viewLifeCycle)
, потому что мне это нужно observeForEver
Комментарии:
1. Ваш сбой происходит из-за того, что вы используете
observeForever
. Что заставляет вас думать, что вам нужно использоватьobserveForever
?2. В некоторых случаях у меня открыто действие на фрагменте, и это действие должно уведомлять наблюдателя о новом значении. Если я установлю его в simple
observe
, наблюдатель не будет уведомлен об активности на нем.3. Не могли бы вы быть более конкретными, пожалуйста. Что вы имеете в виду под активностью, открытой для фрагмента? Вы имеете в виду наоборот? Какова ваша логика: например, activity, у которого есть фрагмент, и это действие уведомляет наблюдателя на fragmetn о том, что что-то новое? Нам нужно больше информации, чтобы помочь вам (то есть больше кода)
4. нет, я имею в виду, что у меня есть действие, содержащее фрагмент, и из этого фрагмента я открываю новое действие, и это новое действие должно уведомлять наблюдателя о фрагменте позади. Фрагмент и действие имеют общий менеджер, который содержит поле livedata, которое позволяет одному (фрагменту) наблюдать, а другому уведомлять (активность)
5. this.titleTxt убедитесь, что ваш titleTxt правильно инициализирован перед установкой текста