In my application I'm using Realm Database to cache data. When application starts user can see cached data then application sends REST API Request to renew all data. In case if something was deleted I'm using this code:
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()
But sometimes I get an Exception: Object is no longer valid to operate on. Was it deleted by another thread?
. Looks like application is trying to get data from Realm in the middle of transaction.
When exactly RealmObject is deleted from Realm? After delete()
or after commitTransaction()
call? If after commitTransaction()
Realm always should have all my objects, because REST API response always contains the same items.