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.

  • Clase de datos Kotlin de RealmObject
  • Parceler: no se puede encontrar el generador de lectura / escritura para el tipo io.realm.RealmList
  • Realm Nested Object sort
  • Float es un campo no válido para la comparación de Realm
  • Retrofit + Deserialization GSON + Relación de reino
  • ¿Cómo especifico que un campo encuadrado puede ser anulable en mi código de migration de Realm?
  • Escribir Daos del reino con transactions cerradas
  • Reino que devuelve datos obsoletos
  • Realm call setter
  • Realm & Kotlin: DefaultRealmModuleMediator.java -> error: statement inalcanzable
  • Cómo usar Realm en una biblioteca