【问题标题】:Returning an Object from a Realm query throws instance closed state exception从 Realm 查询返回对象会引发实例关闭状态异常
【发布时间】:2021-05-28 12:14:05
【问题描述】:

我有一个返回领域对象的函数。

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"
    }
}

【问题讨论】:

    标签: java android kotlin realm


    【解决方案1】:

    正如您的例外所说,Realm 已关闭,您无法访问其属性。

    使用FindFirst() 它返回一个managed 对象,当您访问它时需要打开领域。

    您的解决方法是使用copyFromRealm

    所以将您的查询更改为以下内容

    r.where(MyRealmObject::class.java).equalTo(MyRealmObject.PROPERTY_ID, 1).findFirst()?.copyFromRealm() ?: return@executeTransaction
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多