0
这会返回臭名昭着的错误:
db.activitiesDao().insertStep(step);
我是RxJava的新手,不想使用AsyncTask。
答案 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将数据插入表中