Мне нужно исключить первые записи, записанные в области db, если они больше определенного числа, но я получаю это исключение:
Caused by: java.lang.IllegalStateException: The Realm is already in a write transaction in /Users/cm/Realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsSharedRealm.cpp line 126
at io.realm.internal.OsSharedRealm.nativeBeginTransaction(Native Method)
at io.realm.internal.OsSharedRealm.beginTransaction(OsSharedRealm.java:269)
at io.realm.BaseRealm.beginTransaction(BaseRealm.java:404)
at io.realm.Realm.beginTransaction(Realm.java:145)
at io.realm.Realm.executeTransaction(Realm.java:1491)
atsavedAddresses(AddressBook.kt:39)````
Как вы можете видеть ниже, я пытался добавить commitTransaction
, чтобы поиграть с executeTransactionAsync
и executeTransaction
, начать транзакцию и т. д. Но ничего не получится, хотя я прочитал несколько сообщений, и GitHub выдает комментарии, я даже нашел это сообщение , но это слишкомреферат, относящийся к моему делу
init {
Realm.init(ProActiveApplication.applicationContext())
}
private val realm = Realm.getDefaultInstance()
val query = realm.where(RecentAddress::class.java).findAll()
fun savedAddresses(name: String, address: String) {
realm.beginTransaction()
realm.executeTransactionAsync {
val addressToSave = realm.createObject(RecentAddress::class.java)
addressToSave.name = name
addressToSave.street = address
Log.d("ME","-----------------")
Log.d("ME", " CreateTransaction: ${addressToSave.name} in ${addressToSave.street}")
Log.d("ME","-----------------")
}
realm.commitTransaction()
realm.close()
realm.beginTransaction()
realm.executeTransaction {
if (query.size > 2) {
val location = query.get(0)
Log.d("ME","-----------------")
Log.d("ME", " This is cancelled: ${query.get(0)}")
Log.d("ME","-----------------")
location?.deleteFromRealm()
} }
РЕДАКТИРОВАТЬ
Как и предполагалось, я собираюсь исключить beginTransaction()
и commitTransaction
также яизменено на executeTransaction
вместо `executeTransactionAsync ()
fun savedAddresses(name: String, address: String) {
// realm.beginTransaction()
realm.executeTransaction {
val addressToSave = realm.createObject(RecentAddress::class.java)
addressToSave.name = name
addressToSave.street = address
Log.d("ME", "-----------------")
Log.d("ME", " CreateTransaction: ${addressToSave.name} in ${addressToSave.street}")
Log.d("ME", "-----------------")
}
// realm.commitTransaction()
realm.close()
// realm.beginTransaction()
realm.executeTransaction {
if (query.size > 2) {
val location = query.get(0)
Log.d("ME", "-----------------")
Log.d("ME", " This is cancelled: ${query.get(0)}")
Log.d("ME", "-----------------")
location?.deleteFromRealm()
}
}
Теперь я понимаю, что Realm собирается отменить первую позицию 0, но затем добавляет следующую запись в позицию 0 и не в конце списка
Если я отменяю второй блок executeTransaction
, запись успешно добавляется в последовательном порядке, но остается вторым блоком, транзакция удаляет строку 0, но затем вставляетвторая запись на постition 0, не в конце списка