数据库
首页 > 数据库> > android – Kotlin-coroutines的房间观察数据库的变化

android – Kotlin-coroutines的房间观察数据库的变化

作者:互联网

因此,我最近开始使用协同程序进行实验,我从Rxjava2切换到协同程序,我还没有掌握它但仍然,我遇到了一个需要观察我的数据库更改并更新对应的UI的情况.

RxJava过去常常为我提供Flowables,Completeable等,我可以观察到Db的变化.

    abstract fun insert(data: SomeData): Long

    @Query("SELECT * FROM somedata_table")
    abstract fun getData(): Flowable<List<SomeData>>

所以现在这里我曾经订阅了getData并且总是习惯于观察变化

现在输入coroutines,我使用带有延迟结果的暂停函数来返回我的响应

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    abstract fun insert(data: SomeData): Long

    @Query("SELECT * FROM somedata_table")
    abstract fun getData(): List<SomeData>
suspend fun getAllSomeData():Deferred<List<SomeData>>{
        return GlobalScope.async (context= coroutineContext){
            database.myDao().getData()
        }
    }

现在我无法听取更新,协程中的频道可能是正确的答案吗?但我不确定如何使用Room.

解决方法:

原版的:

您应该使用LiveData替换RxJava(Flowable,Single等 – > LiveData).它的工作方式与RxJava observables相同,只是它由google创建,专门设计为外部库的替代品.它是Architecture Components堆栈的一部分,与Room相同.

有关如何使用房间阅读herehere的指导.

当谈到将Coroutines与Room集成时,目前似乎有no out-of-the-box solution providedit is being worked on.你可能可以使用this article.

更新:

从2.1室(Alpha)开始,添加了对Kotlin Coroutines的支持.有关如何使用它的一些细节可以在this article找到.

注意:Room尚不支持频道,因为它们仍然是一个实验性功能.

祝好运 :)

标签:android,kotlin,kotlinx-coroutines
来源: https://codeday.me/bug/20190607/1193720.html