Rxjava 操作数据库是如此简单
2018-01-06 15:38
375 查看
先前有写过基于Rxjava+Retrofit获取网络数据,有时数据源来自本地数据库,读写数据库也是耗时操作。既然mvp+Rxjava的封装适用于网络数据,是否适用于数据库的操作呢? 这几天也查看了相关的资料,没有看到一针见血的文章。细细看来,其实也很简单。只需要改一行代码就可以搞定!
Retrofit的封装过程可以参考先前的文章:安卓框架搭建之MVP+Retrofit+RxJava基础:,这里先给出访问网络数据的关键代码(下面方法在presenter内):
①、②、③是RxJava三个主要模块
①Observable 被观察者,即需要在工作线程中执行的任务
②Subscription 观察者,继承自Observer,设置了监听回 调的方法
③订阅的执行和周期管理
在上面的代码中,被观察者是网络数据。而观察者除了返回类型,其他是不需要改变的, 第三点的订阅执行和周期管理也是固定不变的
用RxJava操作数据库,说白了,就是新建一个Observable ,且在Observable 内执行操作数据库的代码。也就是我前面提到的改一行代码就能搞定。下面是插入数据到数据库的代码(在presenter内):
②、③不变,只是把①和数据库的操作相关联
那么下面的重点是Observable 对象与操作数据库如何结合
Observable对象的建造很简单,传入相关的参数/类型,重写call()方法,并根据读写完成情况,执行subscriber【观察者】的相关方法。
这样一来,基于目前的框架结构。只需要做小小的改动。就能完美的利用Rxjava操作数据库。不仅仅是数据库。其他类似的耗时操作。也都可以使用这个套路。最近越来越觉得RXjava框架简约而不简单~
Retrofit的封装过程可以参考先前的文章:安卓框架搭建之MVP+Retrofit+RxJava基础:,这里先给出访问网络数据的关键代码(下面方法在presenter内):
@Override public void getTestData(int start, int count) { //获取数据 HashMap<String, String> map = new HashMap<>(); map.put("start", StringUtils.getString(start)); map.put("count", StringUtils.getString(count)); Observable<MovieListBean> observable = RetrofitManager.getInstace().create(ApiService.class).getMovieListData(map).map((new HttpResultFunc<MovieListBean>())); Subscription rxSubscription = new ProgressSubscriber<>(new SubscriberOnResponseListenter<MovieListBean>() { @Override public void next(MovieListBean testBean) { mView.setTestBeanData(testBean); } @Override public void error(BaseResultBean errResponse) { mView.showError(errResponse); } }, mContext, false); RetrofitManager.toSubscribe(observable, (Subscriber) rxSubscription); addSubscrebe(rxSubscription); }
①、②、③是RxJava三个主要模块
①Observable 被观察者,即需要在工作线程中执行的任务
②Subscription 观察者,继承自Observer,设置了监听回 调的方法
③订阅的执行和周期管理
在上面的代码中,被观察者是网络数据。而观察者除了返回类型,其他是不需要改变的, 第三点的订阅执行和周期管理也是固定不变的
用RxJava操作数据库,说白了,就是新建一个Observable ,且在Observable 内执行操作数据库的代码。也就是我前面提到的改一行代码就能搞定。下面是插入数据到数据库的代码(在presenter内):
@Override public void insertUser2Db(UserBean bean) { //插入数据库,返回是否插入成功 Observable<Boolean> observable = DBManager.getInstace().insertUser(bean); Subscription rxSubscription = new ProgressSubscriber<>(new SubscriberOnResponseListenter<Boolean>() { @Override public void next(Boolean isSuccess) { mView.doInsertDb(isSuccess); } @Override public void error(BaseResultBean errResponse) { mView.showError(errResponse); } }, mContext); FileRetrofitManager.toSubscribe(observable, (Subscriber) rxSubscription); addSubscrebe(rxSubscription); }
②、③不变,只是把①和数据库的操作相关联
那么下面的重点是Observable 对象与操作数据库如何结合
public Observable<Boolean> insertUser(final UserBean userBean) { return Observable.create(new Observable.OnSubscribe<Boolean>() { @Override public void call(Subscriber<? super Boolean> subscriber) { subscriber.onStart(); if (userBean != null) { ContentValues values = new ContentValues(); values.put("name", userBean.getName()); values.put("number", userBean.getNumber()); //插入数据库失败为-1 if (DBHelper.insertData(DBHelper.USER_TABLE, values) != -1) { subscriber.onNext(true); } else { subscriber.onNext(false); } subscriber.onCompleted(); } else { subscriber.onNext(false); subscriber.onCompleted(); } } }); }
Observable对象的建造很简单,传入相关的参数/类型,重写call()方法,并根据读写完成情况,执行subscriber【观察者】的相关方法。
这样一来,基于目前的框架结构。只需要做小小的改动。就能完美的利用Rxjava操作数据库。不仅仅是数据库。其他类似的耗时操作。也都可以使用这个套路。最近越来越觉得RXjava框架简约而不简单~
相关文章推荐
- spring操作数据库如此简单
- Sqlla: 数据库操作从未如此简单
- Sqlla: 数据库操作从未如此简单
- Norm 数据库操作竟然可以如此简单
- MAMP链接数据库并且对数据库操作的简单示例
- php 简单连接数据库的操作
- 下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作
- Rxjava +EventBus 数据库的异步操作和界面的刷新
- SQLiteDatabase里面的简单操作数据库的方法
- linux学习:sqlite3简单数据库查询操作
- 编写数据库操作类,使ASP.NET中的数据库操作变得简单
- PHP数据库的简单操作
- 用JSP和数据库操作实现的简单的用户登录
- 使用MYSQL对数据库,表进行一些简单的CRUD操作
- 对数据库的简单操作
- MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
- c#数据库简单操作
- 一个简单的NoSQL内存数据库—Berkeley DB基本操作的例子
- Python3 数据库增删改查简单操作
- smarty 对数据库的简单操作。