Intereting Posts
Наследование интерфейса – Расширение интерфейса в Котлине Не удалось построить Gradle с помощью Kotlin, Scala и Java Android M запрашивает разрешение в onSurfaceTextureAvailable callback не в действии Тестирование почтовых запросов в Ktor Как получить различную реализацию функции верхнего уровня в Unit и InstrumentTests для Android Общее генерирование Kotlin для более конкретного подкласса проекции не допускаются для непосредственных подтипов супертипа Robolectric test и LiveData Как вызвать методы расширения вне класса, в котором они определены? Обновление Kotlin от 1.0.2 до 1.0.3: java.lang.NoSuchMethodError: виртуальный метод не предоставленInjectedData $ app_compileDebugKotlin () Имеет ли Kotlin стандартный способ форматирования числа в качестве английского ординала? Когда лямбда-параметры должны быть noinline в Котлин? Jacoco с gradle и kotlin не создает файл jacoco.exec kotlin, Как значение действительной переменной мы можем изменить в другом классе, к которому она передала параметр? Лучший способ назначить, только если правая сторона не равна нулю?

Написание Realm Daos с закрытыми транзакциями

Мы начали интегрировать Realm в наш проект Android и столкнулись с небольшой проблемой. Мы переписали наш Daos с Realm, как это, например:

public class RealmAuthDao { public static RealmAuthToken getAuthToken() { Realm realm = RealmFactory.getAuthInstance(); RealmAuthToken token = realm.where(RealmAuthToken.class).findFirst(); return token; } 

но каждые несколько минут получили следующее исключение –

Msgstr "Невосстановимая ошибка.

Мы поняли, что нам нужно закрыть каждый экземпляр реального мира, который мы открыли во всем приложении, поэтому мы попробовали это:

 public class RealmAuthDao { public static RealmAuthToken getAuthToken() { Realm realm = RealmFactory.getAuthInstance(); RealmAuthToken token = realm.where(RealmAuthToken.class).findFirst(); realm.close // close the instance we were using return token; } 

Однако, когда мы это делали, всякий раз, когда мы пытались получить доступ к членам или свойствам объектов, которые мы запрашивали, он стал недействительным и было выбрано следующее исключение:

«Этот экземпляр Realm уже закрыт, что делает его непригодным».

Есть ли правильный способ реализовать Дао с царством? Или нам нужно просто запрашивать из экземпляра realm каждый раз?

Я делаю то, что я получаю экземпляр объекта realm в своей деятельности и передаю его классу dao для запроса. Они закрывают экземпляр после остановки активности и отлично работают, мои методы dao не являются статичными, хотя мне нужно и экземпляр dao и передать объект realm как параметр конструктора.

Да, вам нужно закрыть экземпляры Realm, но вы можете прочитать документацию о лучших практиках относительно их открытия и закрытия, в частности, что вы должны использовать onCreate/onDestroy для Activity / main thread, и вы должны использовать try(Realm realm = Realm.getDefaultInstance()) { блок для фонового потока, и любой метод, который должен использовать Realm, должен передать его как аргумент метода.

 public static RealmAuthToken getAuthToken(Realm realm) { return realm.where(RealmAuthToken.class).findFirst(); }