Android 使用RxJava批处理插入
我需要从JSon提要加载数据(最多22000条记录),并将它们存储在我的android设备上(在SQLite中) 执行单个插入很容易实现,但速度很慢。理想情况下,我希望对对象进行批处理,以插入这些对象的列表并将其传递给db 我可以看到如何强制执行,但我确实希望使用RxJava执行,但不确定如何执行Android 使用RxJava批处理插入,android,sqlite,rx-java,Android,Sqlite,Rx Java,我需要从JSon提要加载数据(最多22000条记录),并将它们存储在我的android设备上(在SQLite中) 执行单个插入很容易实现,但速度很慢。理想情况下,我希望对对象进行批处理,以插入这些对象的列表并将其传递给db 我可以看到如何强制执行,但我确实希望使用RxJava执行,但不确定如何执行 谢谢您可以使用SQL事务在单个事务中插入项目 db.beginTransaction(); try { //insert data here db.setTransactionSucc
谢谢您可以使用SQL事务在单个事务中插入项目
db.beginTransaction();
try {
//insert data here
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
编辑1:
你喜欢这个工作吗
myObservable.insertIntoDatabase(json)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(//called when the insert is complete);
编辑2:
使用SQL事务一次插入NUM_项
myObservable.buffer(NUM_ITEMS).flatMap(new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> strings) {
//insert items here using SQL transaction
return Observable.just("Inserted items " + strings.size());
}
}).subscribe(s -> System.out.println(s));
myObservable.buffer(NUM_ITEMS).flatMap(新的Func1(){
@凌驾
公共可观察调用(列表字符串){
//使用SQL事务在此处插入项
返回Observable.just(“插入的项”+strings.size());
}
}).订阅->系统输出打印项次;
您可以使用运算符累积对象
例如:
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();
}
}
});
Observable-stringObservable=Observable.create(new-Observable.OnSubscribe()){
@凌驾
公开作废通知(Subscriber我知道这一点。我问的是RxJava部分,它用一个列表调用它。@最后五句如果你是从后台线程调用它,你不需要RxJava。如果你是从主线程调用它,你只需要使用调度程序在后台线程调用它,你不是在回答我的问题-如何批处理使用RxJava的项。@FinalFive看起来我没有完全理解这个问题。看看我的编辑是否有帮助。批处理在哪里?你在找运算符吗?你可以在这里检查如何完成:@SergiiPechenizkyi看起来很棒,只是安卓上没有jdbc:(@Ziem,看起来很有希望。虽然在Java中很难找到任何示例。当项目用完但未达到缓冲区限制时会发生什么?我发布了关于缓冲区示例的答案。