java - 从 Realm 查询返回对象会引发实例关闭状态异常
问题描述
我有一个返回领域对象的函数。
private fun getNext(): MyRealmObject? {
var item: MyRealmObject? = null
try {
Realm.getDefaultInstance().use { realm ->
realm.executeTransaction { r: Realm ->
item = r.where(MyRealmObject::class.java).equalTo(MyRealmObject.PROPERTY_ID, 1).findFirst() ?: return@executeTransaction
}
}
} catch (e: Exception) {
Log.e(TAG, e.localizedMessage!!)
} finally {
return item
}
}
但是,当我调用该函数并尝试访问属性时,出现错误:
IllegalStateException:此 Realm 实例已关闭,使其无法使用。
private fun doSomething() {
val item = getNext() ?: return
val title = item.title // Error thrown here
}
我在这里做错了什么?
MyRealmObject.kt
@RealmClass
open class RealmPhoto : RealmObject() {
@PrimaryKey
@Index
lateinit var id: Int
var title: String = ""
companion object {
const val PROPERTY_ID = "id"
}
}
解决方案
正如您的例外所说,领域已关闭,您无法访问其属性。
使用FindFirst()
它会返回一个managed
对象,当您访问它时需要打开领域。
您的解决方法是使用copyFromRealm
因此,将您的查询更改为以下内容
r.where(MyRealmObject::class.java).equalTo(MyRealmObject.PROPERTY_ID, 1).findFirst()?.copyFromRealm() ?: return@executeTransaction
推荐阅读
- android - 如何将原生安卓屏幕添加到颤振应用程序?
- workflow - 确保 qbo3 任务在一天中的不同时间发生
- reactjs - 我可以在动态反应中创建许多钩子吗?
- jquery - 如何在尚未加载的输入上使用 jquery datepicker?
- javascript - 我如何让 for-of 循环在谷歌标签管理器中工作?
- python - 应用引擎,Flask-Socketio 服务器 Cors_Allowed_Origins 标头丢失
- python - matplotlib savefig 导致分段违规
- python - Python正则表达式:使用findall仅从括号中提取整数的问题
- java - Spring 将数据保存到数据库时,一切都为空
- ios - AudioKit 引擎在物理设备上失败错误域=com.apple.coreaudio.avfaudio 代码=-10875