В основном у меня есть две модели: чат и сообщение. Чат содержит поле типа RealmList со всеми сообщениями, относящимися к соответствующему Чату. Моя проблема: когда я пытаюсь добавить сообщение «а» (которое уже существует внутри области) в чат «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 чата.