android - 无意中调用了 Realm 更改监听器

标签 android realm

基本上我有两个模型,聊天和消息。 Chat 包含一个 RealmList 类型的字段,其中包含属于相应 Chat 的所有消息。我的问题:当我尝试将消息“a”( Realm 内已存在)添加到聊天“b”(--> 代码)时,调用了 RealmChangeListener。 RealmChangeListener 正在监听整个消息表。调用 OrderedCollectionChangeSet 时会更改数组,这些更改包含聊天“b”内的消息字段中包含的所有消息。我的问题是这是否是有意为之的,为什么会这样?

我试图通过注释掉不同的行来找出问题所在。但最后,当我向聊天中添加消息时,总是会调用 ChangeListener。

class Chat {
    ...
    val messages: RealmList<Message> = RealmList()
    ...
}

realm.executeTransaction {
    newMessage = realm.copyToRealm(aMessage)
    chat.messages.add(newMessage)
}

allMessage.addChangeListener { messages: RealmResults<Message>, 
    changes: OrderedCollectionChangeSet? -> 
    //Always invoked when above transaction runs
    //changes contains changes-Array with all Messages from above 
    chat
}

class Message {
    @PrimaryKey
    var id: String = UUID.randomUUID().toString() + System.currentTimeMillis()
    var messageId: Long = System.currentTimeMillis()
    var messageContent: FlatMessage? = null
    var user: User? = null
    var createdAt: Long = System.currentTimeMillis()
    var updatedAt: Long = System.currentTimeMillis()
    var chat: Chat? = null
    var isNew: Boolean = false
    var isEdited: Boolean = false
    var insertDate: Date = Date()
    var isBotMessage: Boolean = false
}

我希望只有在将消息添加到消息表时才会调用 changeListener,而不是在将现有消息添加到聊天的 RealmList 字段时调用。

最佳答案

我在 github 上打开了一个问题并得到了答案:https://github.com/realm/realm-java/issues/6401

关于android - 无意中调用了 Realm 更改监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54188149/

相关文章:

android - NestedScrollView 在 Recyclerview 调整大小时滚动到顶部

c# - 即使数据类型相同,realm.xamarin 也会出现错误 "Data type mismatch"

swift - 在 iOS 10 Widget 和 Apple Watch 之间共享数据

java - Android - android.view.InflateException : Binary XML file line #9: Error inflating class fragment

Android:从谷歌地图获取无效的 KML 文件

php - 如何在 CakePHP 中访问 POST 数据然后将其删除?

android - 如何在 Realm 中保存和加载数据

java - 我可以通过编程方式将 TextView 的 xml 文本与另一个字符串进行比较吗?

ios - 使用 Realm 搜索数组 (iOS)

swift - 我可以在不知道对象是什么类型的情况下从数据库中获取对象吗?