Я не могу получить запросы на запросы Realm Query для Android в Android с помощью Kotlin. Я попробовал полный (1) и лямбда (2) синтаксис для этого отдельно:Уведомление о запросе на Realm не срабатывает с использованием Kotlin
object DataService {
val realm: Realm = Realm.getDefaultInstance()
var allDogs: RealmResults<Dog> = realm.where(Dog::class.java).findAll()
fun start() {
// (1)
allDogs.addChangeListener(object: RealmChangeListener<RealmResults<Dog>> {
override fun onChange(element: RealmResults<Dog>?) {
print("Ping?")
}
})
// (2)
allDogs.addChangeListener {
// This listener doesn't fire when I create managed the Dog object below
print("Ping?")
}
realm.executeTransaction {
realm.createObject(Dog::class.java)
}
}
}
мне интересно, если это имеет отношение к этой линии от документации:
Изменить слушателей работают только с потоками Looper. Для потоков non-looper, , вы должны вручную использовать Realm.waitForChange().
При попытке зарегистрировать прослушиватель в потоке, который его не поддерживает, вы получите исключение. Так что здесь должно быть что-то еще. Возможно, вы закрываете Царство до того, как произойдет обратный вызов? –
@ChristianMelchior Это полезно знать. Нет, я не закрываю Царство. –
Слушатели также не будут вызываться, если RealmResults будет GC'ed. Однако похоже, что вы создаете одноэлементный объект, который не должен быть GC'ed? –