因此,我最近开始使用协同程序进行实验,我从Rxjava2切换到协同程序,我还没有掌握它但仍然,我遇到了一个需要观察我的数据库更改并更新对应的UI的情况.
RxJava曾经为我提供Flowables,Completeable等,使用它我可以观察到Db的变化.
abstract fun insert(data: SomeData): Long
@Query("SELECT * FROM somedata_table")
abstract fun getData(): Flowable<List<SomeData>>
Run Code Online (Sandbox Code Playgroud)
所以现在这里我曾经订阅了getData并且总是习惯于观察变化
现在输入coroutines,我使用带有延迟结果的暂停函数来返回我的响应
@Insert(onConflict = OnConflictStrategy.IGNORE)
abstract fun insert(data: SomeData): Long
@Query("SELECT * FROM somedata_table")
abstract fun getData(): List<SomeData>
Run Code Online (Sandbox Code Playgroud)
suspend fun getAllSomeData():Deferred<List<SomeData>>{
return GlobalScope.async (context= coroutineContext){
database.myDao().getData()
}
}
Run Code Online (Sandbox Code Playgroud)
现在我无法听取更新,协程中的频道可能是正确的答案吗?但我不确定如何使用Room.