使用Rxjava2操作Realm

最近项目需要使用Realm作为本地数据库,Realm作为移动端流行数据库框架之一,自身提供的API已经非常完善且使用简单,但作为使用了RxJava全家桶的项目,直接调用Realm的API总感觉有点不爽, 难道不能使用Rxjava来方便调用Realm吗?

google一下发现自己不是第一个有这种想法的人,已经有人实现了这个想法

使用Realm和RxJava打出组合拳的正确姿势

Realm Post

国内的文章也是参考国外某位大神的代码做出了一些修改,但由于文章较早,使用的Rxjava1,与项目使用的Rxjava2稍微有些区别,就花点时间将原代码改造 成了Rxjava2版本,方便以后使用。

源码已上传github:RxJavaToRealm

简单调用:

    /**
     * 增加
     */
    private void add() {
        Random random = new Random();
        int i = random.nextInt(10000);
        final Student student = new Student();
        student.setId(i);
        student.setNanme("name " + i);
        student.setAge(i);
        RealmObservable
                .createObservable(new Function<Realm, Student>() {
                    @Override
                    public Student apply(Realm realm) throws Exception {
                        return realm.copyToRealm(student);
                    }
                })
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Student>() {
                    @Override
                    public void accept(Student s) throws Exception {
                        Log.d(TAG, "添加成功");
                        Toast.makeText(MainActivity.this, "添加成功!", Toast.LENGTH_SHORT).show();
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Log.e(TAG, throwable.getMessage());
                    }
                }, new Action() {
                    @Override
                    public void run() throws Exception {

                    }
                });
    }

复制代码
    /**
     * 查找
     */
    private void find() {
        RealmObservable
                .createObservable(new Function<Realm, List<Student>>() {
                    @Override
                    public List<Student> apply(Realm realm) throws Exception {

                        RealmResults<Student> all = realm.where(Student.class).findAll();
                        return realm.copyFromRealm(all);
                    }
                })
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<List<Student>>() {
                    @Override
                    public void accept(List<Student> students) throws Exception {
                        tv.setText(students.toString());
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {

                    }
                });
    }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值