我需要从json提要加载数据(最多22000条记录),并将它们存储在我的android设备(sqlite)上。
单独插入很容易实现,但速度很慢。理想情况下,我希望对要插入的对象进行批处理,并将这些对象的列表传递给数据库。
我可以看到如何做到这一点,但我真的很想用rxjava,但不知道如何做到。
谢谢

最佳答案

您可以使用buffer运算符累积对象。
例子:

Observable<String> stringObservable = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        for (int i = 0; i < 9; i++) {
            subscriber.onNext("a");
        }

        subscriber.onCompleted();
    }
});

stringObservable
    .buffer(5)
    .subscribe(new Observer<List<String>>() {
        @Override
        public void onCompleted() {
            Log.i("rxjava", "onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            Log.i("rxjava", "onError");
        }

        @Override
        public void onNext(List<String> strings) {
            Log.i("rxjava", "onNext " + strings.size());

            db.beginTransaction();
            try {
                for (String string: strings) {
                    //insert data here
                }
                db.setTransactionSuccessful();
            } finally {
                db.endTransaction();
            }
        }
    });

输出:
接下来的5
接下来的4
完成的
因为我是RXJava初学者,所以我不知道这是否是实现目标的最可靠的方法。
如果您正在寻找反应性sqlite,您应该查看SQLBrite库。

10-07 19:02
查看更多