为什么不调用实时数据观察方法?
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);
}
}
});
我在我的 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);
}
}
});