android - 如何使用 Room Db 返回 Rx Single 交易?

标签 android rx-java2 android-room

假设有一个 Dao具有以下两种方法的类:

1)

delete(items: List<Item>): Completable

2)
 insert(items: List< Item >): Single<List<Long>>

如何将它们链接到 @transaction Dao 中的方法以“删除方法”开头然后返回“插入方法”结果的类?

我想要一个带有这样签名的方法:
@Transaction
fun deleteAndInsert(): Single<List<Long> > {
    ...
}

最佳答案

我假设您的主要目标是返回类型为 deleteAndInsert()Single .

你可以通过小的修改来实现

  • 首先通过制作delete()insert()功能同步。
  • 由于@Transaction只能同步工作,我们需要创建另一个调用 delete() 的函数和 insert() .另外,用 @Transaction 注释这个函数
  • 创建另一个创建 Single 的新函数并调用上述函数。

  • abstract class SampleDao{
        protected abstract fun delete()
        protected abstract fun insert(items: List<Item>) : List<Long>
    
        @Transaction
        protected open fun deleteAndInsertSync(items: List<Item>): List<Long>{
            delete()
            return insert(items)
        }
    
        fun deleteAndInsert(items:List<Item>): Single<List<Long>>{
            return Single.create {
                it.onSuccess(deleteAndInsertSync(items))
            }
        }
    }
    

    关于android - 如何使用 Room Db 返回 Rx Single 交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55463342/

    相关文章:

    android - 在RxJava上链接调用

    android - 向 CompositeDisposable 添加大量 Disposable 的潜在危害

    android - 是否可以确保 Android Room 数据库中只有一行包含 bool 值 'true' ?

    android - 类似 Twitter 的背景动画可在 Android 中绘制

    android - 如何正确从Samsung Accessory SDK 2.2.2升级到2.3.0?

    java - Google 应用内购买返回错误代码 6

    android - 房间插入POJO列表并在Recyclerview中检索

    java - 我将如何设置这个枚举来返回我想要的图像?

    java - RxJava - 两个可观察对象

    Android + Room + 尝试重新打开一个已经关闭的对象 : SQLiteDatabase: - After adding migration