Rxjava +EventBus 数据库的异步操作和界面的刷新
来源:互联网 发布:杭州网络推广公司排名 编辑:程序博客网 时间:2024/06/06 22:37
1,数据库的操作核心代码:
以插入数据库为例,本文重点在与数据库的操作,相关数据库的创建不做讨论
private SqliteOpearRx(Context context) { this.context = context; mContentResolver = this.context.getContentResolver(); dbHelper = DBHelper.getInstance(context); } /** * 初始化 * * @param context * @return */ public static SqliteOpearRx getInstance(Context context) { if (mSqliteOpearRx == null) { synchronized (SqliteOpearRx.class) { if (mSqliteOpearRx == null) { mSqliteOpearRx = new SqliteOpearRx(context); } } } return mSqliteOpearRx; }//上层直接调用的函数/** * 插入数据库 * * @param ObjectBean * @return */ public Observable<Integer> useInsertMessage(MessageBean ObjectBean) { // 逻辑执行在异步线程中 return makeObservable(insertSqlMessage(ObjectBean)).subscribeOn(Schedulers.computation()); }** * * @param mMessageBean * @return */ private Callable<Integer> insertSqlMessage(final MessageBean mMessageBean) { return new Callable<Integer>() { @Override public Integer call() { // 模板代码插入数据库的具体代码 int fileType = mMessageBean.getFileType(); ContentValues values = new ContentValues(); Uri insertRow = mContentResolver.insert(AllMessageProvider.CONTENT_URI, values); /此处还有一个小知识点,以插入数据库的id作为bean的唯一标识,避免数据的重复 int id = (int) ContentUris.parseId(insertRow); return id; } }; }//核心的转化函数 实现callback函数转为observableprivate <T> Observable<T> makeObservable(final Callable<T> func) { return Observable.create(new Observable.OnSubscribe<T>() { @Override public void call(Subscriber<? super T> subscriber) { try { subscriber.onNext(func.call()); } catch (Exception ex) { Log.e(TAG, "Error reading from the database", ex); } } }); }
2,作为工具调用函数
SqliteOpearRxmDbHelper = SqliteOpearRx.getInstance(mContext); //返回结果在主线程中处理 mDbHelper.useInsertMessage(nImBean).observeOn(AndroidSche dulers.mainThread()).subscribe(new Action1<Integer>() { @Override public void call(Integer id) { if (id != -1) { Log.d(TAG, "接收到的信息插入数据库成功 id" + id); if (nImBean.getMsrpId() == null) { nImBean.setMsrpId(id + ""); } nImBean.setId(id); nImBean.setMsgOpera(MessageBean.MESSAGE_OPERA_ADD); //通知界面进行刷新 EventBus.getDefault().post(nImBean); } } });
3.Activity中接收查询的结果进行界面的刷新 @Override public void onDestroy() { Log.d(TAG, "onDestroy()"); EventBus.getDefault().unregister(this); super.onDestroy(); }@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate"); EventBus.getDefault().register(this); }@Subscribe(threadMode = ThreadMode.MAIN) public void getEvent(MessageBean bean) {//处理自己的界面刷新的逻辑 + }
“`
阅读全文
1 0
- Rxjava +EventBus 数据库的异步操作和界面的刷新
- 通过Rxjava和RxAndroid实现的EventBus
- Rxjava和EventBus的使用比较
- RxJava和EventBus的区别(摘抄,仅做记录)
- 异步加载界面pjax 刷新界面里的部分内容
- 基于RxJava、RxAndroid的EventBus实现
- [Android]基于RxJava、RxAndroid的EventBus实现
- EventBus和litepal数据库的一般使用
- Android单元测试:测试RxJava的同步及异步操作
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- IOS异步获取数据并刷新界面dispatch_async的使用方法
- R语言与Python细节上的混淆
- ASP.NET sqlserver 数据转为横向显示
- UVa11988
- java学习【web基础-css入门】
- JavaScript判断客户端是否是iOS或者Android手机移动端
- Rxjava +EventBus 数据库的异步操作和界面的刷新
- Java开发中的23种设计模式详解
- [奇技淫巧] Android 4.4 5.0 6.0 另一种思路的沉浸式状态栏
- Linux的Yum问题
- HTML5 CSS3 诱人的实例 :canvas 模拟实现电子彩票刮刮乐
- Oracle APEX 报错List of Values not supported for this type
- jekyll 部署
- Android异步任务AsyncTask使用
- 《改善Java程序的151个建议》读后感