为什么不调用实时数据观察方法?

why is the live data observe method not called?

我在我的 android 应用程序中使用 Room 和 livedata,但我无法在 livedata 中获取数据,我尝试了所有方法。最后一种方法是使用 observe 方法,它给我一个列表,但是没有调用这个方法,我该如何解决这个问题?

这是我的 Dao 界面

@Dao
public interface QuestionTemplateDao {

    @Query("SELECT question_template_table.ID,question_template_table.Text,question_template_table.FieldNo from question_template_table where question_template_table.FieldNo = :fieldNO")
    LiveData<List<QuestionTemplate>> getTemplate(int fieldNO);

}

这是我的 Repo

public LiveData<List<QuestionTemplate>> getmAllQuestionTemplates(int field) {
        if(questionTemplateDao==null)
            questionTemplateDao=db.questionTemplateDao();
        mQuestionTemplates=questionTemplateDao.getTemplate(field);
        return mQuestionTemplates;
    }

这是 viewModel

templateLiveData = mRepository.getmAllQuestionTemplates(selectedField);
        templateList = new ArrayList<>();
        templateLiveData.observe(activity, new Observer<List<QuestionTemplate>>() {
            @Override
            public void onChanged(@Nullable List<QuestionTemplate> questionTemplates) {
                Log.e("onChanged","onChanged");
                if (questionTemplates != null) {
                    templateList.addAll(questionTemplates);
                }
            }
        });

如果在ViewModel中直接这样使用会怎么样:

templateList = new ArrayList<>();
mRepository
    .getmAllQuestionTemplates(selectedField)
    .observe(activity, new Observer<List<QuestionTemplate>>() {
        @Override
        public void onChanged(@Nullable List<QuestionTemplate> questionTemplates) {
            Log.e("onChanged","onChanged");
            if (questionTemplates != null) {
                templateList.addAll(questionTemplates);
            }
        }
    });

无需在ViewModel中获取LiveData的新对象,您也可以直接从返回给您的LiveData中观察


编辑:

检查另一个解决方法,

你的 DAO 会是这样的:

@Dao
public interface QuestionTemplateDao {

    @Query("SELECT question_template_table.ID,question_template_table.Text,question_template_table.FieldNo from question_template_table where question_template_table.FieldNo = :fieldNO")
    List<QuestionTemplate> getTemplate(int fieldNO);

}

您的存储库,

public void getmAllQuestionTemplates(int field, MutableLiveData<List<QuestionTemplate>> liveData) {
    if(questionTemplateDao==null)
        questionTemplateDao=db.questionTemplateDao();
    liveData.setValue(questionTemplateDao.getTemplate(field));
}

你的视图模型,

mRepository.getmAllQuestionTemplates(selectedField, (MutableLiveData<List<QuestionTemplate>>) templateLiveData);
templateList = new ArrayList<>();
templateLiveData.observe(activity, new Observer<List<QuestionTemplate>>() {
        @Override
        public void onChanged(@Nullable List<QuestionTemplate> questionTemplates) {
            Log.e("onChanged","onChanged");
            if (questionTemplates != null) {
                templateList.addAll(questionTemplates);
            }
        }
    });