Android Room RxJava Update/Delete 返回值

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,将执行的结果发射出去

你可能感兴趣的:(Android Room RxJava Update/Delete 返回值)