В моем приложении я использую базу данных Realm для кэширования данных.Когда приложение запускается, пользователь может видеть кэшированные данные, а затем приложение отправляет REST API Request для обновления всех данных.В случае, если что-то было удалено, я использую этот код:
val realm = Realm.getInstance(dbConfig)
realm.beginTransaction()
realm.apply {
delete(SupportLineRealmModel::class.java)
delete(ClientUserRealmModel::class.java)
delete(ColleagueRealmModel::class.java)
delete(ConferenceRealmModel::class.java)
delete(ConferenceMemberRealmModel::class.java)
delete(BusinessContactRealmModel::class.java)
delete(AdvertisingSupportLineRealmModel::class.java)
insertOrUpdate(supportLines)
insertOrUpdate(clientUsers)
insertOrUpdate(colleagues)
insertOrUpdate(businessContacts)
insertOrUpdate(adSupportLines)
insertOrUpdate(conferences)
}
realm.commitTransaction()
Но иногда я получаю исключение: Object is no longer valid to operate on. Was it deleted by another thread?
.Похоже, приложение пытается получить данные из Realm в середине транзакции.
Когда именно RealmObject удаляется из Realm?После delete()
или после commitTransaction()
звонка?Если после commitTransaction()
Realm всегда должен иметь все мои объекты, потому что ответ REST API всегда содержит одинаковые элементы.