#android #repository #observable #viewmodel
#Android #репозиторий #наблюдаемый #viewmodel
Вопрос:
У меня есть репозиторий, который устанавливает данные следующим образом:
private MutableLiveData<JSONObject> myVocab = new MutableLiveData<>();
public Repo(Context context) {
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(() -> {
myVocab = jsonReader.readJSONFromAssets(context, "myVocab.json")
});
service.shutdown();
}
public MutableLiveData<JSONObject> getVocab() { return myVocab; }
Он правильно считывает в формате json и сохраняет его в myVoc, я уже проверил.
У меня также есть ViewModel, который прослушивает объект vocab, а затем выполняет с ним какие-либо действия:
private MediatorLiveData<JSONObject> vocab = new MediatorLiveData<>();
/* CONSTRUCTOR */
public WordsViewModel(@NonNull Application application) {
super(application);
wordsRepository = Repo.getInstance(application);
vocab.addSource(_wordsRepository.getVocab(),
jsonObject -> vocab.setValue(jsonObject));
doStuffWithVocab();
}
Однако наблюдатель никогда не вызывается (я поместил туда журналы для проверки). Сейчас я столкнулся с этой проблемой в нескольких приложениях и, похоже, никогда не смогу ее решить, кроме как с помощью взломов.
Почему мой наблюдатель не работает? (Это работает в MainActivity, но не в ViewModel).
Комментарии:
1.«наблюдатель никогда не вызывается» — похоже, у вас нет наблюдателя. Вы подключаете
getVocab()
LiveData
кMediatorLiveData
, но это не наблюдатель. Где наблюдатель?2. Обратите внимание, что текущие данные не будут передавать никакого значения ни одному владельцу жизненного цикла, который не находится в активном состоянии. Я думаю, следует проверить состояние вашей активности / фрагмента во время обновления значения ваших текущих данных