【问题标题】:How to migration in realm for new table in android?如何在android中迁移新表的领域?
【发布时间】:2020-10-29 17:05:35
【问题描述】:

我将一个新表添加到我的领域数据库。对于迁移,我尝试这种方式:

 realm.schema.create("AddTodoModel")
      .addField("id", Long::class.java, FieldAttribute.PRIMARY_KEY)
      .addField("title", String::class.java , FieldAttribute.INDEXED)
      .addField("list", RealmList::class.java , FieldAttribute.INDEXED)
      .addField("color", Int::class.java , FieldAttribute.INDEXED)

这是 AddTodoModel 类:

open class AddTodoModel(
    @PrimaryKey
    var id: Long,
    var title: String,
    var list: RealmList<TodoModel>,
    var color: Int
) : RealmObject() {
    constructor() : this(0, "", RealmList<TodoModel>(), R.color.black)
}

当启动应用程序时,我收到此错误:

java.lang.IllegalArgumentException: Use addRealmObjectField() instead to add fields that link to other RealmObjects: list

我只是在应用更新时收到此错误。那么,如何修复此错误并迁移到新版本?

【问题讨论】:

    标签: android kotlin realm realm-migration


    【解决方案1】:

    在尝试了一些方法后,我找到了解决方案。也许有人需要这个: 我在数据库中创建了一个列表作为 TodoModel 类,但我想为此创建一个迁移。而且我还需要使用FieldAttribute.REQUIRED 而不是FieldAttribute.INDEXED。所以这是最终的迁移代码:

     realm.schema.create("AddTodoModel")
          .addField("id", Long::class.java, FieldAttribute.PRIMARY_KEY)
          .addField("title", String::class.java, FieldAttribute.REQUIRED)
          .addRealmListField(
               "list",
               realm.schema.create("TodoModel")
               .addField("isDone", Boolean::class.java, FieldAttribute.REQUIRED)
          )
          .addField("color", Int::class.java, FieldAttribute.REQUIRED)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多