2016-09-12 79 views
0

チャットルームを持つレルム関係リスト:アンドロイド - 主キー

public class ChatRoom extends RealmObject{ 

    @PrimaryKey 
    int chatRoomID; 

    RealmList<ChatMessage> chatMessages; 


     //getters & setters ... 
} 

Messageクラス:

public class ChatMessage extends RealmObject { 

     int chatMessageID; 

     String chatMessageContent; 

     User author; 
    //getters & setters ... 

    } 

ユーザー:

public class User extends RealmObject { 

    @PrimaryKey 
    int Id; 

    String Name; 


     //getters & setters ... 

} 

まあchatmessageが作成されたのは初めてで結構です2回目にエラーが表示されます:既に値があります:5 [ユーザーのID]

新しいチャットメッセージを作成するのではなく、チャットメッセージリストにユーザーオブジェクトを追加するにはどうすればよいですか?

これは、私は新しいchatMessageを追加する方法です:それが原因chatMessageである

mRealm.beginTransaction(); 
     ChatRoom chatRoom = mRealm.where(ChatRoom.class).equalTo("chatRoomID", chatRoomID) 
       .findFirst(); 
     chatRoom.getChatMessages().add(chatMessage); // add to the list 
     mRealm.commitTransaction(); 
+0

? – beeender

+0

ChatMessage ch =新しいChatMessage(); ch.SetChatMessageID(someId); ch.setChatMessageContent( "text"); ch.setChatMessageAuthor(著者); –

答えて

1

アンマネージRealmObjectあり、それは1と同じ主キーがすでにレルムで保存されています。

オブジェクトがアンマネージドオブジェクトである場合、管理対象オブジェクトに追加された場合、レルムはそのオブジェクトを作成しようとします。同じpkを持つオブジェクトがすでに存在する場合は例外がスローされます。この問題を解決するには

、最初に管理RealmObjectが、その後のように、それを追加取得するためにcopyToRealmOrUpdate()を使用:どのようにあなたが `chatMessage`を作成しなかった

ChatMessage ch = new ChatMessage(); 
ch.SetChatMessageID(someId); 
ch.setChatMessageContent("text"); 
ch.setChatMessageAuthor(author); 

mRealm.beginTransaction(); 
ch = mRealm.copyToRealmOrUpdate(ch); // get/create a managed RealmObject 
ChatRoom chatRoom = mRealm.where(ChatRoom.class).equalTo("chatRoomID", chatRoomID) 
    .findFirst(); 
chatRoom.getChatMessages().add(ch); // add to the list 
mRealm.commitTransaction(); 
+0

チャットメッセージを更新するだけの場合はどうすればいいですか?realmobjectしか持たず、chatRoom.setChatMessage(ch)のようなことをしたいのですが?これどうやってするの – swati