我有用于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