[英]Convert RxJava Observables To Live Data With Kotlin Extension Functions
[英]Realm with live data and RxJava in Kotlin
我正在尝试在基于 Kotlin 的应用程序中使用 Realm。
我建立了一个基本项目,测试将元素添加到领域,并使用实时数据和视图模型观察它们。
然后我想添加一些其他的可观察对象,并使用 RxJava 的 combineLatest 将它们组合起来。
我为所有 observables 创建了 Rx Observables。 我观察来自 Realm 的实时数据,然后调用 RxJava BehaviourSubject 的 onNext() 方法将 Rx Observable 之一设置为与观察到的领域数据相同的值。 这工作正常,但是一旦我将 Throttle 添加到 Rx Operators,我收到以下错误消息:
从不正确的线程访问领域。 Realm 对象只能在创建它们的线程上访问。 在 io.realm.BaseRealm.checkIfValid(BaseRealm.java:442) 在 io.realm.com_example_myapplication_ItemRealmProxy.realmGet$id(com_example_myapplication_ItemRealmProxy.java:105) 在 io.realm.com_example_myapplication_ItemRealmProxy.toString(com_example_6.myapplication)
这是我的代码的一部分:
private val itemViewModel: ItemViewModel by lazy {
ViewModelProviders.of(this).get(ItemViewModel::class.java)
}
val itemsSubject = BehaviorSubject.createDefault(listOf<Item>())
val intsSubject = BehaviorSubject.createDefault(4)
itemViewModel.getItemData().observe(this, Observer<RealmResults<Item>> { t ->
val items = t.map {
it
}
itemsSubject.onNext(items)
})
Observables.combineLatest(itemsSubject, intsSubject) { a, b ->
a
}.throttleLast(500, TimeUnit.MILLISECONDS).subscribe {
Log.i("Items", "Items combined read: ${it}")
}
我看不到 Realm 是如何与 onNext 调用耦合的,也看不到油门。 看起来非常奇怪。
理想情况下,我只想坚持使用实时数据,但我需要对其他可观察对象进行操作,而 RxJava 对此很有用。
我需要在主线程上观察RxJava,如下:
Observables.combineLatest(itemsSubject, intsSubject) { a, b ->
a
}.throttleLast(500, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe {
Log.i("Items", "Items combined read: ${it}")
}
}
从某种意义上说,Realm 错误具有误导性,因为它最终是对 RxJava 的错误使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.