Android 如何使用livedata选择房间?

Android 如何使用livedata选择房间?,android,android-room,android-mvvm,Android,Android Room,Android Mvvm,我正在使用带有livedata的房间。 当我从viewmodel中选择时,我什么都看不到。 但是当我直接选择dao时,我可以看到项目。 有什么问题吗 房间里没有可变的实时数据,所以我选择了livadata。。。但它不起作用。 请帮帮我。 我不明白我的问题 当我使用debugImplementation'com.amitshekhar.android:debug db:1.0.6'输入“”并搜索结果查询时,结果是正确的。 我认为问题在于使用livedata。 我登录了viewmodel,这是空的

我正在使用带有livedata的房间。 当我从viewmodel中选择时,我什么都看不到。 但是当我直接选择dao时,我可以看到项目。 有什么问题吗

房间里没有可变的实时数据,所以我选择了livadata。。。但它不起作用。 请帮帮我。 我不明白我的问题

当我使用debugImplementation'com.amitshekhar.android:debug db:1.0.6'输入“”并搜索结果查询时,结果是正确的。 我认为问题在于使用livedata。 我登录了viewmodel,这是空的

@Dao
public interface MemoDao {
     @Query("select * from memolist where date between :fromDate and :toDate and isDeleted='true' order by date")
    LiveData<List<MemoEntity>> selectAll(String fromDate, String toDate);


    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertMemo(MemoEntity memo);

    @Update
    void updateMemo(MemoEntity memo);

    @Delete
    void deleteMemo(MemoEntity... memo);

}
公共类MemoViewModel扩展了ViewModel{
动态数据模型;
应用数据库存储;
公共void init(上下文上下文、字符串fromDate、字符串toDate){
mRepository=AppDatabase.getInstance(上下文);
memoModel=mRepository.MemoDao().selectAll(fromDate,toDate);
}
公共LiveData备忘录列表(){
Log.d(“TAG”,memoModel.getValue().get(0.getId()+”);
回归模型;
}
公共LiveData memoListByTag(字符串标记、字符串fromDate、字符串toDate){
memoModel=mRepository.MemoDao()。选择AllByTag(tag、fromDate、toDate);
回归模型;
}
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
fromDate=(字符串)dataHolder.popDataHolder(“fromDate”);
toDate=(字符串)dataHolder.popDataHolder(“toDate”);
memoViewModel=ViewModelProviders.of(this.get)(memoViewModel.class);
memoViewModel.init(this.getContext(),fromDate,toDate);
memoViewModel.memoList().observe(这个,新的观察者(){
@凌驾
更改后的公共作废(列出实体){
listItems=memoViewModel.memoList().getValue();
RecycleServiceAdapter.notifyDataSetChanged();
}
});
}

像这样更改MemoViewModel类

public class MemoViewModel extends ViewModel {

MutableLiveData<List<MemoEntity>> memoModel=new MutableLiveData();
AppDatabase mRepository;

public void init(Context context,String fromDate, String toDate){
    mRepository =  AppDatabase.getInstance(context);
    memoModel.postValue(mRepository.MemoDao().selectAll(fromDate,toDate))
}

public MutableLiveData<List<MemoEntity>> memoList(){
     return memoModel;
}
public LiveData<List<MemoEntity>> memoListByTag(String tag, String fromDate, String toDate){
    memoModel = mRepository.MemoDao().selectAllByTag(tag,fromDate,toDate);
    return memoModel;
}
公共类MemoViewModel扩展了ViewModel{
MutableLiveData memoModel=新的MutableLiveData();
应用数据库存储;
公共void init(上下文上下文、字符串fromDate、字符串toDate){
mRepository=AppDatabase.getInstance(上下文);
memoModel.postValue(mRepository.MemoDao().selectAll(fromDate,toDate))
}
公共可变LiveData备忘录列表(){
回归模型;
}
公共LiveData memoListByTag(字符串标记、字符串fromDate、字符串toDate){
memoModel=mRepository.MemoDao()。选择AllByTag(tag、fromDate、toDate);
回归模型;
}
}

像这样改变你的刀类

 @Dao
public interface MemoDao {
     @Query("select * from memolist where date between :fromDate and :toDate and isDeleted='true' order by date")
    List<MemoEntity> selectAll(String fromDate, String toDate);


    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertMemo(MemoEntity memo);

    @Update
    void updateMemo(MemoEntity memo);

    @Delete
    void deleteMemo(MemoEntity... memo);

}
@Dao
公共接口备忘录{
@查询(“从备忘录列表中选择*,其中日期介于:fromDate和:toDate之间,isDeleted='true'按日期排序”)
列表selectAll(字符串fromDate,字符串toDate);
@插入(onConflict=OnConflictStrategy.REPLACE)
作废插入备忘录(备忘录实体备忘录);
@更新
作废更新备忘录(实体备忘录);
@删除
作废删除备忘录(备忘录实体…备忘录);
}

MutableLiveData是LiveData的一个子类,用于其某些属性(setValue/postValue),使用这些属性,我们可以在调用onChange()时轻松通知UI。

像这样更改MemoViewModel类

public class MemoViewModel extends ViewModel {

MutableLiveData<List<MemoEntity>> memoModel=new MutableLiveData();
AppDatabase mRepository;

public void init(Context context,String fromDate, String toDate){
    mRepository =  AppDatabase.getInstance(context);
    memoModel.postValue(mRepository.MemoDao().selectAll(fromDate,toDate))
}

public MutableLiveData<List<MemoEntity>> memoList(){
     return memoModel;
}
public LiveData<List<MemoEntity>> memoListByTag(String tag, String fromDate, String toDate){
    memoModel = mRepository.MemoDao().selectAllByTag(tag,fromDate,toDate);
    return memoModel;
}
公共类MemoViewModel扩展了ViewModel{
MutableLiveData memoModel=新的MutableLiveData();
应用数据库存储;
公共void init(上下文上下文、字符串fromDate、字符串toDate){
mRepository=AppDatabase.getInstance(上下文);
memoModel.postValue(mRepository.MemoDao().selectAll(fromDate,toDate))
}
公共可变LiveData备忘录列表(){
回归模型;
}
公共LiveData memoListByTag(字符串标记、字符串fromDate、字符串toDate){
memoModel=mRepository.MemoDao()。选择AllByTag(tag、fromDate、toDate);
回归模型;
}
}

像这样改变你的刀类

 @Dao
public interface MemoDao {
     @Query("select * from memolist where date between :fromDate and :toDate and isDeleted='true' order by date")
    List<MemoEntity> selectAll(String fromDate, String toDate);


    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertMemo(MemoEntity memo);

    @Update
    void updateMemo(MemoEntity memo);

    @Delete
    void deleteMemo(MemoEntity... memo);

}
@Dao
公共接口备忘录{
@查询(“从备忘录列表中选择*,其中日期介于:fromDate和:toDate之间,isDeleted='true'按日期排序”)
列表selectAll(字符串fromDate,字符串toDate);
@插入(onConflict=OnConflictStrategy.REPLACE)
作废插入备忘录(备忘录实体备忘录);
@更新
作废更新备忘录(实体备忘录);
@删除
作废删除备忘录(备忘录实体…备忘录);
}

MutableLiveData是LiveData的一个子类,用于其某些属性(setValue/postValue),使用这些属性,我们可以在调用onChange()时轻松通知UI。

它不起作用。我在使用可变livedata时出错。这是“不确定如何将游标转换为该方法的返回类型”,请参阅upvote,如果上面的代码返回一些值。我不明白你想做什么请再添加一些代码解释清楚你有没有试过使用带有可变LiveData的room?文件室不支持mutablelivedata。所以我尝试只使用livedata,但它不支持memolist()。observe@user9628944请检查最新的一个我已经更新了我的代码它不工作。我在使用可变livedata时出错。这是“不确定如何将游标转换为该方法的返回类型”,请参阅upvote,如果上面的代码返回一些值。我不明白你想做什么请再添加一些代码解释清楚你有没有试过使用带有可变LiveData的room?文件室不支持mutablelivedata。所以我尝试只使用livedata,但它不支持memolist()。observe@user9628944请检查最新的我已经更新了我的代码
 @Dao
public interface MemoDao {
     @Query("select * from memolist where date between :fromDate and :toDate and isDeleted='true' order by date")
    List<MemoEntity> selectAll(String fromDate, String toDate);


    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertMemo(MemoEntity memo);

    @Update
    void updateMemo(MemoEntity memo);

    @Delete
    void deleteMemo(MemoEntity... memo);

}