【发布时间】:2019-07-20 10:06:55
【问题描述】:
我有一个带有Room 数据库的测试项目。使用Asynctask,我可以成功地将带有一些测试数据的对象插入到数据库中。我正在尝试学习RxJava并将Asynctask替换为RxJava'sobserver,但它不起作用。我已经阅读了很多文档并观看了教程,但我认为我不太明白。以下是相关代码:
在这里,我使用来自我的List 的数据设置我的Room 对象:
for(ObjectForArray item: listToDatabase) {
myRoomEntity.setName( item.getName() );
Log.d( "TAG", myRoomEntity.getName() );
}
然后我尝试使用RxJava Observable 将数据插入数据库。这最初是使用 Asynctask 成功完成的:
Observable<MyRoomEntity> myRX = Observable
.just(myRoomEntity)
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() );
myRX.subscribe( new Observer<MyRoomEntity>() {
@Override
public void onSubscribe(Disposable d) {
Log.d("TAG ONSUBSCRIBE", d.toString());
try {
myViewModel.insertDatabase( myRoomEntity );
Log.d( "TAG", "Populating database Success" );
}catch(Error error) {
Log.d( "TAG", error.toString() );
}
}
OnNext、OnError 和 OnComplete 为空。
当我运行项目时,它会因错误而崩溃:
Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
我显然使用了RxJava 错误,因为重点是远离主线程执行异步任务。
【问题讨论】:
标签: android-studio asynchronous rx-java android-room