android - 为什么不调用实时数据观察方法?
问题描述
我在我的 android 应用程序中使用 Room 和 livedata,但我无法在 livedata 中获取数据,我尝试了每一件事。最后一种方法是使用给我一个列表的观察方法,但没有调用这个方法,我该如何解决这个问题?
这是我的道界面
@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;
}
这是视图模型
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);
}
}
});
不需要取 in 的新对象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));
}
你的视图模型,
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);
}
}
});
推荐阅读
- javascript - 在 drupal 8 中创建一个 js rangeslider
- c# - 将泛型方法 + arg 类型 + 返回类型存储在列表中以供稍后调用
- css - Genesis Framework - 如何在移动设备的同一行上获取徽标和汉堡菜单
- rest - 将参数传递给 Delphi Datasnap REST 服务器
- php - Laravel错误尝试使用relashionship过滤时获取非对象的属性
- c# - Linq 按复杂类型的列表分组
- c# - 用更少的时间加入两张桌子
- node.js - 如何使用nodejs在同一页面中显示成功消息或错误消息?
- java - 如何设置条件以便仅在从特定活动打开活动时执行命令?
- c# - 如何从工作流对话框的标题中删除问号?