我需要从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库。