我在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);
}
这是我的仓库
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);
}
}
});
答案 0 :(得分:1)
如果您在 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);
}
}
});
无需在LiveData
中使用ViewModel
的新对象,您还可以直接从返回的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));
}
您的ViewModel,
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);
}
}
});