Android 使用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

我需要从JSon提要加载数据(最多22000条记录),并将它们存储在我的android设备上(在SQLite中)

执行单个插入很容易实现,但速度很慢。理想情况下,我希望对对象进行批处理,以插入这些对象的列表并将其传递给db

我可以看到如何强制执行,但我确实希望使用RxJava执行,但不确定如何执行


谢谢

您可以使用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中很难找到任何示例。当项目用完但未达到缓冲区限制时会发生什么?我发布了关于缓冲区示例的答案。