java后台rxjava_RxJava没有在后台线程上运行

我正在尝试在Room中保存数据,它需要一些后台线程来保存数据 . 所以我创造了一个像这样的观察者

val obs: Observable>>? = Observable.fromCallable(object :Callable>>{

override fun call(): MutableLiveData> {

return mutableLiveData

}

})

然后我订阅,观察和取消订阅它

obs?.subscribeOn(Schedulers.io())?.observeOn(AndroidSchedulers.mainThread())?.unsubscribeOn(Schedulers.io())

?.subscribe(object : Observer>>{

override fun onComplete() {

}

override fun onSubscribe(d: Disposable?) {

}

override fun onNext(value: MutableLiveData>?) {

for(source in value!!.value!!.iterator()){

sourceDao.insert(source)//this is the line number 87, that logcat is pointing

}

}

override fun onError(e: Throwable?) {

e?.printStackTrace()

}

})

我在Schedulers.io线程上订阅它,然后在AndroidSchedulers.mainThread()上观察它,但我仍然没有得到后台线程错误 . 进一步来说

Caused by: java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

at android.arch.persistence.room.RoomDatabase.assertNotMainThread(RoomDatabase.java:204)

at android.arch.persistence.room.RoomDatabase.beginTransaction(RoomDatabase.java:251)

06-18 11:11:08.674 3732-3732/com.theanilpaudel.technewspro W/System.err: at com.package.myapp.room.SourceDao_Impl.insert(SourceDao_Impl.java:63)

at com.package.myapp.main.MainRepository$saveToRoom$1.onNext(MainRepository.kt:87)

at com.package.myapp.main.MainRepository$saveToRoom$1.onNext(MainRepository.kt:76)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值