基本上,我有两个模型,聊天和消息。聊天包含RealmList类型的字段,其中包含属于相应聊天的所有消息。我的问题:当我尝试将消息“ a”(已经存在于领域中)添加到聊天室“ 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字段中时调用。
答案 0 :(得分:1)
我在github上打开了一个问题,并得到了答案:https://github.com/realm/realm-java/issues/6401
答案 1 :(得分:1)
因此,如果有人遇到这个问题,我实际上已经解决了问题。
问题
我的消息类别具有chat类型的现场聊天。因此,存在一种循环关系。
让我解释一下:
我们将messageA添加到chatA:
我的解决方案:
我只是将Message内部的Chat类型的Chat字段替换为Long字段chatId。我知道这不是一个很好的解决方案。随时提出更好的建议。