私はCRUD操作のDBManagerクラスを持っており、アプリケーション全体で使用したいと思っていますが、Realmオブジェクトは作成されたスレッドでしかアクセスできないため、スレッド内のDBManagerクラスメソッドなど...すべてのスレッドでレルムを使用
私が望むのは、DBManager内で宣言されたupdateUploadingFileStatusメソッドを、サービス内で実行されているスレッドから呼び出すことです。
これは別のスレッドからこのメソッドを呼び出すと、私の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)
}
}
で、この問題を解決することができますどのようにjava.lang.IllegalStateException Realm access from incorrect thread.
スロー?そんなことをするための良いスタイルは何ですか?
あなたのDbManagerはシングルトンでなければならないことを知っていますので、各スレッドで同じレルムにアクセスする必要があります –
これはすでにシングルトンです –
だからグローバルシングルトンの場合、レルム? – EpicPandaForce