ViewModel, похоже, не может наблюдать MutableLiveData

#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. Обратите внимание, что текущие данные не будут передавать никакого значения ни одному владельцу жизненного цикла, который не находится в активном состоянии. Я думаю, следует проверить состояние вашей активности / фрагмента во время обновления значения ваших текущих данных