【问题标题】:Realm Java Migration: Property has been made required领域 Java 迁移:已将属性设为必需
【发布时间】:2018-06-12 02:18:39
【问题描述】:

适用于大多数全新安装,但在最新的应用更新后,很多报告都会出现此问题。两次更新之间已经有一段时间了,所以我认为这可能是由于用户在我添加架构之前从非常旧的版本更新......但其他人说他们已经从全新安装中看到了这一点。 Realm Java 是realm-gradle-plugin:5.1.1

感谢您的帮助,谢谢!

错误:

Caused by io.realm.exceptions.RealmMigrationNeededException
Migration is required due to the following errors: - Property 'Loan.loanRatePct' has been made required.
...
...onCreate (Activity.java:168)

MyMigration.java

if (oldVersion == 0) {
    schema.get("Storage")
            .addField("heat", String.class);
    oldVersion++;
}

if (oldVersion == 1) {
    schema.get("Env")
            .addField("gameType", String.class);
    oldVersion++;
}

if (oldVersion == 2) {
    schema.get("Loan")
            .addField("loanRatePct", Double.class);
    schema.create("GameMode")
             .addField("md", String.class)
            .addField("name", String.class)
            .addField("days", int.class)
            .addField("term", int.class)
            .addField("rate", String.class)
            .addField("amount", int.class)
            .addField("icon", int.class);
    schema.create("Leaderboard")
            .addField("score", String.class);

    oldVersion++;
}

if (oldVersion == 3) {
    schema.get("Leaderboard")
            .addField("mode", String.class);
    oldVersion++;
}

MyApplication.java

Realm.init(getApplicationContext());
    RealmConfiguration config = new RealmConfiguration.Builder()
            //todo: EVERY UPDATE: is new schema needed?
            .schemaVersion(4) // Must be bumped when the schema changes
            .migration(new MyMigration()) // Migration to run instead of throwing an exception
            .build();
    Realm.setDefaultConfiguration(config);

Activity.java

protected void onCreate(Bundle savedInstanceState) {    
    realm = Realm.getDefaultInstance();
    ...
}

编辑:忘记了:

Loan.java

public class Loan extends RealmObject {
    String theloan;
    int loan;
    int loanRate;
    double loanRatePct;
    int loanBalance;
}

【问题讨论】:

  • .addField("loanRatePct", Double.class); 应该是.addField("loanRatePct", double.class);

标签: java android realm realm-java


【解决方案1】:

Double 表示nullable double

double 表示non-null double

所以.addField("loanRatePct", Double.class); 应该是.addField("loanRatePct", double.class);

【讨论】:

  • 请注意,您可能需要调整架构版本并检查该字段是否可为空,如果是,则 setRequired("loanRatePct", true)
  • Kotlin 中非空版本需要使用::class.javaPrimitiveType
  • 感谢您的澄清。它正在工作。对于那些寻找答案的人,您应该在第二个参数中使用原始数据类型而不是 Object。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
相关资源
最近更新 更多