我有用於CRUD操作的DBManager類,我希望跨應用程序使用它,我知道Realm對象只能在創建它們的線程上訪問,因此我無法使用My線程等內部的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應該是一個單身人士,所以你可以通過你需要的每個線程訪問相同的領域 –
它已經singelton –
因此,如果它是一個全球性的單身人士,你會在哪裏關閉境界? – EpicPandaForce