我有一个可以像这样设置数据的存储库:
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中使用。)