gpt4 book ai didi

android - Realm 一对多关系不持久

转载 作者:搜寻专家 更新时间:2023-10-30 23:27:47 25 4
gpt4 key购买 nike

我正在尝试在 UserChat 之间使用 Realm 实现多对多关系对象。我正在关注 the oficial documentation .这是我的对象。

 public class User implements RealmModel {

@PrimaryKey
private String userId;
private String name;
private String phone;
private String pictureURL;
private String thumbnailURL;
private String pushToken;
private String status;
private long lastOnlineMs;
public RealmList<Chat> chats = new RealmList<>();

public User() {}

}

public class Chat implements RealmModel {

@Required
@PrimaryKey
private String chatId;
private long creationDateMs;
private String creatorUserId;
private String name;

@LinkingObjects("chats")
public final RealmResults<User> users = null;

private int chatType;


public Chat() {}
}

这是我在数据库中创建 Chat 对象并添加关系的代码。之前已正确创建用户:

public void addChat(final Chat chat, final User creatorUser, final User opponentUser ) {
realm.executeTransaction(realm -> {
realm.copyToRealmOrUpdate(chat);

creatorUser.chats.add(chat);
opponentUser.chats.add(chat);
});
}

执行代码后,UserChat 对象存储在数据库中,但用户的 chat list 为空。

我还使用了 realm.beginTransaction ,它和 executeTransaction 一样,区别只是执行是线程安全的。

我也使用 realm.insertOrUpdate(obj),但结果相同。

最佳答案

copyToRealmOrUpdate 来自文档:

Updates an existing RealmObject that is identified by the same {@link io.realm.annotations.PrimaryKey} or a new copy if no existing object could be found

它不会更新您作为参数提供的 RealmObject,因为它还不是托管对象,因此您需要检索返回的托管对象以将其添加到您的用户。

public void addChat(final Chat chat, final User creatorUser, final User opponentUser ) {
realm.executeTransaction(realm -> {
Chat managedChat = realm.copyToRealmOrUpdate(chat);
creatorUser.chats.add(managedChat);
opponentUser.chats.add(managedChat);
});
}

关于android - Realm 一对多关系不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54146848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com