微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Realm Migration 在 Android 中不起作用?

如何解决Realm Migration 在 Android 中不起作用?

我目前正在开发一个像 whatsapp 这样的 android 聊天应用程序,但我遇到了 Realm Migration 问题的情况。我对 Realm 了解不多,但对其进行了成功的离线聊天应用程序测试。我不能在领域中使用多个模型,因为它是关于迁移器的。我尝试了所有方法,但我的迁移器无法正常工作,而且我也不知道在此(模式。)语句之后我必须使用哪些语句来根据我的情况迁移我的模型。 这是我的 Realm ChatList 模型的代码:-

public class RealmChatListModel extends RealmObject {

@Index
private String userID;

private String Username;

private String Descryption;

private String phoneNo;

private String lastMessage;

private String Date;

private String ImageURI;

private long lastMessageTime;


public RealmChatListModel() {
}

public String getUserID() {
    return userID;
}

public void setUserID(String userID) {
    this.userID = userID;
}

public String getUsername() {
    return Username;
}

public void setUsername(String username) {
    Username = username;
}

public String getDescryption() {
    return Descryption;
}

public void setDescryption(String descryption) {
    Descryption = descryption;
}

public String getPhoneNo() {
    return phoneNo;
}

public void setPhoneNo(String phoneNo) {
    this.phoneNo = phoneNo;
}

public String getLastMessage() {
    return lastMessage;
}

public void setLastMessage(String lastMessage) {
    this.lastMessage = lastMessage;
}

public String getDate() {
    return Date;
}

public void setDate(String date) {
    Date = date;
}

public String getimageURI() {
    return ImageURI;
}

public void setimageURI(String imageURI) {
    ImageURI = imageURI;
}

public long getLastMessageTime() {
    return lastMessageTime;
}

public void setLastMessageTime(long lastMessageTime) {
    this.lastMessageTime = lastMessageTime;
}
}

这是我的领域聊天模型代码:-

public class RealmChat extends RealmObject {

@PrimaryKey
@Index
private String messageKey;

private String time;
private String date;
private String textMessage;
private String type;
private String sender;
private String receiver;
private String uri;
private boolean isSeen;
private String duration;
private String receivername;
private String fileSize;
private boolean isNextDay;
private boolean isDeleted;
private Date extactdate;
private String repMesKey;
private String repMesUri;
private String repMesText;
private String repMesType;
private String repMesSender;
private long timestamp;
private String repMesSendPhone;
private boolean isReplied;
private String phoneNo;
private boolean isForwarded;


public String getMessageKey() {
    return messageKey;
}

public void setMessageKey(String messageKey) {
    this.messageKey = messageKey;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getTextMessage() {
    return textMessage;
}

public void setTextMessage(String textMessage) {
    this.textMessage = textMessage;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getSender() {
    return sender;
}

public void setSender(String sender) {
    this.sender = sender;
}

public String getReceiver() {
    return receiver;
}

public void setReceiver(String receiver) {
    this.receiver = receiver;
}

public String getUri() {
    return uri;
}

public void setUri(String uri) {
    this.uri = uri;
}

public boolean isSeen() {
    return isSeen;
}

public void setSeen(boolean seen) {
    isSeen = seen;
}

public String getDuration() {
    return duration;
}

public void setDuration(String duration) {
    this.duration = duration;
}

public String getReceivername() {
    return receivername;
}

public void setReceivername(String receivername) {
    this.receivername = receivername;
}

public String getFileSize() {
    return fileSize;
}

public void setFileSize(String fileSize) {
    this.fileSize = fileSize;
}

public boolean isNextDay() {
    return isNextDay;
}

public void setNextDay(boolean nextDay) {
    isNextDay = nextDay;
}

public boolean isDeleted() {
    return isDeleted;
}

public void setDeleted(boolean deleted) {
    isDeleted = deleted;
}

public Date getExtactdate() {
    return extactdate;
}

public void setExtactdate(Date extactdate) {
    this.extactdate = extactdate;
}

public String getRepMesKey() {
    return repMesKey;
}

public void setRepMesKey(String repMesKey) {
    this.repMesKey = repMesKey;
}

public String getRepMesUri() {
    return repMesUri;
}

public void setRepMesUri(String repMesUri) {
    this.repMesUri = repMesUri;
}

public String getRepMesText() {
    return repMesText;
}

public void setRepMesText(String repMesText) {
    this.repMesText = repMesText;
}

public String getRepMesType() {
    return repMesType;
}

public void setRepMesType(String repMesType) {
    this.repMesType = repMesType;
}

public String getRepMesSender() {
    return repMesSender;
}

public void setRepMesSender(String repMesSender) {
    this.repMesSender = repMesSender;
}

public String getRepMesSendPhone() {
    return repMesSendPhone;
}

public void setRepMesSendPhone(String repMesSendPhone) {
    this.repMesSendPhone = repMesSendPhone;
}

public boolean isReplied() {
    return isReplied;
}

public void setReplied(boolean replied) {
    isReplied = replied;
}

public String getPhoneNo() {
    return phoneNo;
}

public void setPhoneNo(String phoneNo) {
    this.phoneNo = phoneNo;
}

public boolean isForwarded() {
    return isForwarded;
}

public void setForwarded(boolean forwarded) {
    isForwarded = forwarded;
}

public long getTimestamp() {
    return timestamp;
}

public void setTimestamp(long timestamp) {
    this.timestamp = timestamp;
}

这是我的迁移器代码:-

public class RealmMigration implements io.realm.RealmMigration {

@Override
public void migrate(DynamicRealm realm,long oldVersion,long newVersion) {
    RealmSchema schema = realm.getSchema();

    // Migrate from version 0 to version 1
    if (oldVersion == 0) {
        schema.get("RealmChatListModel")
                .addField("Username",String.class)
                .addRealmListField("lastMessageTime",long.class);
        oldVersion++;
    }

    if (oldVersion == 1) {
        schema.get("RealmChat")
                .addField("extactdate",Date.class)
                .addRealmListField("timestamp",long.class);
    }
}

public static RealmConfiguration getDefaultConfig() {
    return new RealmConfiguration.Builder()
            .schemaVersion(2)
            .migration(new RealmMigration())
            .build();
}

@Override
public int hashCode() { return RealmMigration.class.hashCode(); }

@Override
public boolean equals(Object object) { return object != null && object instanceof RealmMigration; }

}

请帮帮我...................................... ……………………………………………………………………………………………………………………………………………………………………………………………… >>>>>>>>>>>>>>>>>>>>>>

解决方法

是的,我知道了,我的迁移仅通过一次更改即可工作:-

@Override
public void migrate(DynamicRealm realm,long oldVersion,long newVersion) {
    RealmSchema schema = realm.getSchema();

    // Migrate from version 0 to version 1
    if (oldVersion == 0) {
        schema.get("RealmChatListModel")
                .addField("userID",String.class,FieldAttribute.REQUIRED);
        oldVersion++;
    }
}

在这里,我从迁移旧版本中删除了 Realm Chat,因为它是最后一个模型,并在 realmChatListSchema 中添加了 userID 字段是必需的。注意其他需要。我很开心???。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。