Android Room RxJava Update/Delet
Room的基本使用有很多文章可以查看,简单推荐一个
https://www.jianshu.com/p/72eeaded8913
在实际的开发过程中,我们可能需要对增删改的返回值进行检测,但是很多涉及到Room和RxJava配合的文章里都没有写这个,都是写Search
受到@Delete @Insert @Update的返回类型的影响,我们不好直接使用RxJava进行操作,所以需要转变一下思路
我介绍的方法,是在我的项目中,实际使用的,有更好的方法,相互学习。以Delete为例
数据局的delete操作的返回值是int,标明删除的行数。在Room中,@Query我的理解就是执行Sql语句
int类型是不可以当做Observable使用的,但是我们可以把它转换成Observable的方式,直接上代码:
在Dao中:
@Query("DELETE FROM goods")
int deleteAllGoods();
在操作的类型中:
Observable.create((ObservableOnSubscribe) emitter -> {
int result = AppDatabase.getInstance(MainActivity.this).goodsDao()
.deleteAllGoods();
emitter.onNext(result);
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(integer -> {
Log.d(TAG, "accept: onNext and result is " + integer);
}, throwable -> {
Log.d(TAG, "clearAllGoods: failed");
});
道理很简单,就是通过emitter,将执行的结果发射出去