房间不返回实时数据的结果
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
})
我正在尝试从 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
})