我无法使用Kotlin在Android中触发Realm Query Notifications。我已经分别尝试了完整的(1)和lambda(2)语法:
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线程。对于非弯针线程, 你手动必须使用Realm.waitForChange()。
答案 0 :(得分:0)
这不是因为您使用kotlin,而是因为您没有保留对RealmResult对象的任何引用,如果您正在为它们创建侦听器,请先将结果保存为属性或类成员,然后添加听众。