房间不返回实时数据的结果

room not returning results for livedata

我正在尝试从 Android 房间 return 实时数据。我在将结果作为 LiveData return 时遇到问题。

这里是道的摘录

 @Query("SELECT * FROM transaction_table")
  LiveData<List<MyTransaction>> getAllTransactions();

  @Query("SElECT * FROM transaction_table")
  List<MyTransaction> getMyTransaction();

getAllTransactions() 调用无异常运行,但 return 没有结果。另一方面,getMyTransactions()returnsselect查询结果

在视图模型中:myLiveData = repository. getAllTransactions()

在activity中:

 mViewModel!!.myLiveData.observe(this, Observer<List< MyTransaction >> { repositories: List< MyTransaction > ->
})

怎么了?

我认为问题出在 myLiveData = repository.getAllTransactions()

由于getAllTransactions() returns a LiveData,将repository.getAllTransactions分配给成员变量类似于在其上注册观察者和观察者,在您的情况下myLiveData,除非基础数据库发生变化,否则不会被触发或通知。

尝试以下操作,

// in viewmodel
fun myLiveData() = repository.getAllTransactions()

//try to log in the activity and you will see the data
Log.i("activity",mViewModel.myLiveData().value.toString())

//since myLiveData function returns a livedata, you can register observers on to it as well
mViewModel!!.myLiveData().observe(this, Observer<List< MyTransaction >> { repositories: List< MyTransaction > ->
})

问题是这 myLiveData = repository. getAllTransactions() 部分在您创建视图模型实例时完成。

在您开始观察之前myLiveData查询结果已经发布

你应该做的是在ViewModel

中制作一个方法
fun getAllTransactions():LiveData<List<MyTransaction>> {
  return repository. getAllTransactions();
}

并且在 activity、

mViewModel!!.getAllTransactions().observe(this, Observer<List< MyTransaction >> { repositories: List< MyTransaction > ->
//your code goes here
})