如何使用Room和RxJava插入数据?

时间:2017-12-05 11:20:18

标签: android database

0

这会返回臭名昭着的错误:

db.activitiesDao().insertStep(step);

我是RxJava的新手,不想使用AsyncTask。

4 个答案:

答案 0 :(得分:6)

尝试这样的事情。

Observable.fromCallable(() -> db.activitiesDao().insertStep(step))
        .subscribeOn(Schedulers.io())
        .subscribe(...);

如果有空的回报你可以这样做:

Completable.fromRunnable(new Runnable(){
        db.activitiesDao().insertStep(step)
    })
    .subscribeOn(Schedulers.io())
    .subscribe(...);

答案 1 :(得分:1)

这对我有用:

insertStep(Step step);像他在您的activitiesDao()中一样:

@Insert
void insertStep(Step step);

addStep(Step step);插入您要插入步骤的位置:

 public void  addStep(Step step){
    Observable<Step> observable;
    observable = io.reactivex.Observable.just( step);
    observable.subscribeOn( Schedulers.io() )
            .subscribe( new Observer<Step>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {

                }

                @Override
                public void onNext(@NonNull Step step) {
                    //Insert here
                    db.activitiesDao().insertStep(step);

                }

                @Override
                public void onError(@NonNull Throwable e) {
                       Log.e("Error", "Error at" + e);
                }

                @Override
                public void onComplete() {

                }
            } );
}

PS:我正在使用rxjava2

答案 2 :(得分:0)

fun insertIntoDb(blog: Blog) {
    Observable.fromCallable {
        Runnable {
            appDb.blogDao().insert(blog)
        }.run()
    }
            .subscribeOn(Schedulers.io())
            .subscribe {
                D.showSnackMsg(context as Activity, R.string.book_mark_msg)
            }
}

参见上述功能。 (科特林)。必须运行runnable。否则它不会保存数据。我用房间测试了它。快乐的编码

答案 3 :(得分:0)

 fun insertContactUsData(
            contactUsData: ContactUsData,
            database: AppDatabase?,
            apiName: String
        ) {
            Observable.fromCallable {
                database?.contactUsDao()?.insertContactUs(contactUsData)
            }
                .subscribeOn(Schedulers.computation())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe {
                      Lg.d(TAG, list inserted successfully")
                }
        }

不需要Runnable将数据插入表中