Usa el reino en todos los hilos

Tengo una class DBManager para operaciones CRUD y quiero usarla en la aplicación, sé que solo se puede acceder a los objects Realm en el hilo que se crearon y por esa razón no puedo usar los methods de class My DBManager dentro de los hilos, etc. ..

lo que quiero es llamar al método updateUploadingFileStatus declarado dentro de DBManager, desde el hilo que se ejecuta dentro del service.

esta es mi class DBManager

object DbManager { private val realm: Realm by lazy { Realm.getDefaultInstance() } fun saveOrRemoveUploadFile(filePath: String, save: Boolean){ val model = getUploadModelByFilePath(filePath) realm.executeTransaction { model.markedForUpload = save realm.insertOrUpdate(model) } } fun updateUploadingFileStatus(filePath: String, uploaded: Boolean){ val model = getUploadModelByFilePath(filePath) realm.executeTransaction { model.uploadedStatus = uploaded } } fun getFilesForUpload() : List<UploadModel> { return realm .where(UploadModel::class.java) .equalTo("markedForUpload",true) .equalTo("uploadedStatus",false) .findAll() } fun getUploadModelByFilePath(filePath: String) : UploadModel { return realm.where(UploadModel::class.java).equalTo("filePath",filePath).findFirst() ?: UploadModel(filePath) } } 

Llamar a este método desde otro subprocess arroja java.lang.IllegalStateException Realm access from incorrect thread. ¿Cómo se puede resolver este problema? ¿Cuál es un buen estilo para hacer cosas como esa?

Cambie su código de function de la siguiente manera:

  public void updateUploadingFileStatus(final String filePath, final Boolean uploaded) { mRealm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm realm) { UploadModel model = getUploadModelByFilePath(filePath); model.uploadedStatus = uploaded; } }); } 

Hace un time resolví este problema usando una nueva transacción. También estaba usando una class Singleton para acceder al RealmDB, y estaba llamando a esta function dentro de un controller de respuesta de la networking. Esto debería funcionar.

  • Realm Turn Transaction en observable
  • Kotlin - Use Realm Module en android
  • consultas de múltiples dominios de Android con RXJava
  • Cómo consultar Realm en el background Subprocess usando RxJava2
  • ¿Cómo especifico que un campo encuadrado puede ser anulable en mi código de migration de Realm?
  • Cómo usar Realm en una biblioteca
  • Parceler: no se puede encontrar el generador de lectura / escritura para el tipo io.realm.RealmList
  • Android Kotlin Realm Forma correcta de consultar + Actualizar Async
  • Realm, findAllSorted y distinct
  • Retrofit + Deserialization GSON + Relación de reino
  • La compilation falla al usar 'kotlin-kapt' con el reino