Я пытаюсь использовать Realm в приложении на основе Kotlin.
Я создал базовый проект c, в котором проверялось добавление элементов в область и наблюдение за ними с использованием живых данных и модели представления. .
Затем я хотел добавить некоторые другие наблюдаемые и использовать для комбинирования их использовать lateLatest из Rx Java.
Я создал наблюдаемые Rx для всех наблюдаемых. Я наблюдаю живые данные из Realm, а затем вызываю метод onNext () Rx Java BehaviourSubject, чтобы установить для одного из наблюдаемых Rx то же значение, что и у данных наблюдаемой области. Это работает нормально, но как только я добавил Throttle для Rx Operators, я получил следующее сообщение об ошибке:
Доступ к области из неверного потока. Доступ к объектам области возможен только в том потоке, в котором они были созданы. по адресу io.realm.BaseRealm.checkIfValid (BaseRealm. java: 442) по адресу io.realm.com_example_myapplication_ItemRealmProxy.realmGet $ id (com_example_myapplication_ItemRealmProxy. java: 105 * application_exject_exject_exject_exject_exject_exject_exject_exject_exject_exject_ex_ : 661)
Это часть моего кода:
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}")
}
Я не вижу, как область связана с вызовом onNext или с дросселем. Кажется очень странным.
В идеале я хотел бы придерживаться только живых данных, но мне нужно выполнять операции с другими наблюдаемыми, и Rx Java хорош для этого.