You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin SDK中如何在写入事务内给RealmList添加新元素?

问题分析与解决:RealmList修改报错"Cannot modify managed List outside of a write transaction."

你遇到的错误核心原因是查询对象的上下文不对:
你在writeBlocking事务块里,用的是外部的realm.query()来获取AppSettings对象,这个对象是绑定到事务外的Realm实例的托管对象。哪怕你在事务代码块里操作它,它的上下文依然不属于当前写入事务,所以修改它的RealmList时,Realm会判定你是在事务外修改托管列表,抛出报错。

正确的做法是,在事务块内使用当前事务的Realm上下文来查询对象,也就是直接用lambda内部的query()方法(或者显式写this.query(),lambda里的this指向当前写入事务实例)。修改后的代码如下:

class AppSettings : RealmObject {
    @PrimaryKey
    var id: String = "uuid"
    var isFirstLaunch: Boolean = false
    var colorPresets: RealmList<String> = realmListOf()
}

realm.writeBlocking {
    // 使用当前事务的上下文查询对象
    val appSettings = query<AppSettings>().first().find() ?: return@writeBlocking
    appSettings.colorPresets.add(hexCode)
}

简单来说,事务块内的所有CRUD操作都要基于当前事务提供的上下文,这样拿到的对象才属于当前写入事务,修改操作才会被Realm正确识别为事务内的操作。

内容的提问来源于stack exchange,提问作者San

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:42:10