当Sqlite遇见了RxJava,第一篇简书

作者: NKming | 来源:发表于2016-05-30 11:49 被阅读1947次

    写自己的第一篇简书,还是有一点小激动的。

          接触RxJava有一段时间了,一开始接触时,真是被Rxjava中得各种操作符弄得一头雾水,但是静下心来,学习一下RxJava,会发现这真的是一个很好的工具,善用RxJava真的能节省很多时间。

          对于RxJava,我是用的最多的便是其中的异步任务处理,最近刚好写到了数据库SQLite,便记录一下自己在Sqlite操作中使用RxJava的感想。


    数据库的建立:

    简单地继承写法,创建了一个student表

    接下来就是实现这个数据库的方式,我之前的写法就是在线程里面执行数据操作,然后再通过接口回调实现相应地操作。

    接口层

    关键部分代码就是

    �创建新的线程来执行相应地数据操作,然后通过handler切换到主线程,再进行接口回调,在activity中进行ui操作

    总结一下,真个思路还是很明了的,就是需要定义接口,再进行线程切换。如果能将这些操作封装起来的话,那就不用写这么多了。


    RxJava版本的DBManager:

    将回调接口都省掉,返回类型直接定义成Observable

    就插入而言:

    isExistStudent也是一个Observable用来先查询数据库是否存在该学生,然后再接着返回一个insert的操作,利用create来创建一个Observable在io线程中执行,最后在activity里可以直接拿到这个observable,并且在主线程是监听,就可以实现相应地ui操作

    activity中得相应操作:

    这样写的话,就可以让整个操作变成一个链式操作,让思路更清晰明了

    再实现一个获取全部列表的:

    获取全部数据操作

    总结一些:

          在刚刚的操作中,就是将线程中的耗时操作放入到create中执行,然后异步操作和切换线程都可以连着整个链一直写下去,不用再额外定义其他接口,并且整个流程的起点到终点都可以一目了然。

          并且,对于以前的一些采取回调的接口,一旦逻辑复杂起来,就需要写得很复杂,代码可读性不高,采用RxJava后,能够使整个逻辑更清晰明了。并且可以直接利用RxJava来改写之前采取回调的一些方法。

         本篇文章是第一篇简书,有不足之处,望多多指出。

    相关文章

      网友评论

      • Robert_69d2:好文章,正要实现同样的东西,好参考,本来用SqlBrite直接就支持rxjava。但是涉及到多进程访问,要加入contextprovider,只能舍弃sqlbrite了,因此需要自己写数据库的rx操作方法。
      • burro630:看了三遍,有点启发。感谢分享
      • 敲代码的小新:博主源码啥时候传啊
      • JohnyPeng:博主的Android Studio是默认配色吗?感觉这个配色不错啊!能给我一份吗?
        JohnyPeng:@NKming 谢谢
        NKming:@AngryAnts Obsidian配色来的,你可以上http://color-themes.com/?view=index这里下载
      • b8194c36f87b:能否开源完整的代码参考一下呢?
        b8194c36f87b:@NKming 我对 RxJava 不太熟悉,想通过项目练练手,所以想看看完整的代码。
        NKming:@倾心成铭 大概思路就是用rx替换掉之前的线程操作,你可以试着把剩下的几个实现了,有时间我会把源码上传的
      • ImmortalZ:在给insertStudent做了加锁操作,感觉没有必要用线程池,能说说博主用线程池的原因吗
        ImmortalZ:@NKming 原来如此,理解了
        NKming:@Mr_immortalZ insertStudent的确不需要用到线程池,考虑到这整个DBManger里面除了insert方法,还有query无需加锁的方法,所以才使用统一的线程池。

      本文标题:当Sqlite遇见了RxJava,第一篇简书

      本文链接:https://www.haomeiwen.com/subject/ufpqdttx.html