Android房间交易如何完成退货

时间:2019-03-13 16:09:40

标签: android kotlin android-room android-architecture-components

我需要你的帮助。

我有dao接口,可以保存一些配置:

@Dao interface ConfigDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(config: Config)

    @Update(onConflict = OnConflictStrategy.REPLACE)
    fun update(config: Config)

    @Query("select * from T_CONFIG where isSelected = :isSelected")
    fun getConfig(isSelected: Boolean): Single<Config>

    @Query("select * from t_config")
    fun getConfigAll(): LiveData<MutableList<Config>>

    @Query("update T_CONFIG set isSelected = :isSelected where idEnvironment = :id")
    fun updateConfigById(id: String, isSelected: Boolean):Completable

    @Transaction
    fun updateConfigTransaction(configSelected: Config){

        if (configSelected.idEnvironment == Environtment.Type.PRD.toString()){
            updateConfigById(Environtment.Type.PRD.toString(), false)
            updateConfigById(Environtment.Type.DEV.toString(), true)
        }else{
            updateConfigById(Environtment.Type.PRD.toString(), true)
            updateConfigById(Environtment.Type.DEV.toString(), false)
        }
    }
}

我需要知道交易成功或失败的时间。 我尝试从Completable实现io.reactivex,但这是不可能的。

1 个答案:

答案 0 :(得分:1)

将接口更改为抽象类。您必须在没有实现的情况下为所有方法加上abstract前缀。然后:

abstract class ConfigDao(private val db: MyDatabase) {

    // Make sure the method is open so Room can generate the transaction handling code.
    @Transaction
    open fun updateConfigTransaction(configSelected: Config){
        // ...
    }

    fun updateConfigTransactionAsync(configSelected: config): Completable {
        return Completable
            .fromAction { updateConfigTransaction(config) }
            .subscribeOn(db.queryExecutor)
    }
}

subscribeOn(db.queryExecutor)确保查询与返回RxJava类型的所有其他DAO方法在同一线程上运行。将MyDatabase构造函数参数替换为您的数据库类。