我需要你的帮助。
我有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
,但这是不可能的。
答案 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
构造函数参数替换为您的数据库类。