Intereting Posts
Файл Scratch не работает на IntelliJ IDEA Можно ли указать статическую функцию в интерфейсе Kotlin? Это поле утечки объекта контекста Не удается создать приложение Android (с Kotlin) с Gradle: «comand« java.exe »завершен с ненулевым значением выхода 1» Комната Android: каждая переменная связывания в запросе должна иметь соответствующий метод Kotlin Построить на travis-CI, но тесты не запускаются Почему unregisterReceiver () никогда не вызывает onServiceDisconnected? Как получить javaclass из массива java-типа в Котлине? Доступ к представлениям из Activity с Anko Свойства делегата Kotlin, реализующие функцию оператора «предоставлятьDelegate», но метод никогда не вызывал Несоответствие типа Котлина при прохождении в параметре изменять внешний класс через анонимный внутренний объект в котлине Что такое «реализация» в зависимостях Kotlin Gradle? @Embeddable класс с val в Котлине Android-устройство logcat продолжает работать

Написание 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(); }