【问题标题】:Why does Realm create only 8 fields in new RealmObject in some devices?为什么Realm在某些设备的new RealmObject中只创建8个字段?
【发布时间】:2017-07-31 13:16:11
【问题描述】:

我在 Android Studio 中使用 realm-java ver:3.5。 我有一个名为 Message 的 JAVA 类,它扩展了 RealmObject。它有 9 个字段及其 Getter 和 Setter。在某些移动设备中,当我运行我的应用程序时,它会崩溃并且此错误会出现在日志中:

字段数少于预期 - 预期为 9,但为 8

我找到了哪个字段没有创建,所以我在类中更改了它的名称、类型和顺序并重新运行了应用程序,但所有结果都是一样的。

最后我添加了一个新的字段else.Realm又只创建了8个字段!!

为什么 Realm 不能正确创建我的 RealmObject?

public class Message extends RealmObject {
    @PrimaryKey
    private long commandId;

    private Integer id;

    @Required
    private Long initTimeStamp;

    @Required
    private String messageText;

    private User sender;
    private User receiver;

    private MyDateTime sendDate;
    private MyDateTime readDate;

    @Required
    private Integer messageStatus = STATUS_NEW;

public Message() {
    }
/*
 * all setters and getters
 * ...

*/
}

【问题讨论】:

  • 你在做架构迁移吗?
  • 如果我进行迁移,它将是正确的。当我卸载应用程序并重新安装时会出现问题!
  • 如何重新安装应用程序?您是否启用了即时运行?
  • 否,即时运行已关闭。刚才我用 .deleteRealmIfMigrationNeeded() 替换 .migration(new Migration()) 并解决了问题。我认为旧领域数据库未正确从设备中删除。

标签: android realm


【解决方案1】:

我在应用程序部分的清单文件中添加了android:allowBackup="true",默认情况下也是如此。所以我将其更改为android:allowBackup="false"android:restoreAnyVersion="false",这样我的问题就解决了。

更多解释
当我们将allowBackup 授予我们的应用程序时,实际上我们对 android OS 说“嘿,Android,如果我卸载这个应用程序,在此之前备份它的 shared-preference数据库 和其他应用程序数据并将它们收起来。
当我们重新安装应用程序时,Android 会用旧数据替换当前数据!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多