2016-07-12 9 views
0

Wenn ich versuche, Element zu List initialisiert mit Realm fetch hinzuzufügen, löst es UnsupportedOperationException. Dies ist mein Code unten:Kopieren in Liste initialisiert mit Realm DB findAll() löst UnsupportedOperationException aus

private List<MessageModel> chatMessages;

void initializeChat() { 
    chatMessages = realm.where(MessageModel.class) 
      .equalTo("theMainTopidId", getMainTopicModel().getRadomUdid()) 
      .findAllSorted("updatedTime", Sort.DESCENDING); 
    Log.e(TAG, "MessageModelSize1: " + chatMessages.size()); 
    mAdapter = new GroupMessageDetailsAdapter(this, chatMessages, realm); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    mRecyclerView.setAdapter(mAdapter); 
} 

FetchMessage.sendMessage(PrefUtil.getUserInfo(this), theRootMessage, replyText, new MessageReplyListener() { 
     @Override 
     public void onSendMessage(Message sentMessage) { 
      //Log.e(TAG, sentMessage.content); 
      realm.beginTransaction(); 
      MessageModel messageModel = MessageModel.saveMessageToDb(sentMessage); 
      messageModel.setTheMainTopidId(getMainTopicModel().getRadomUdid()); 
      realm.copyToRealm(messageModel); 
      realm.commitTransaction(); 

      //Log.e(TAG, chatMessages.toString()); 
      chatMessages.add(messageModel); <======= Where the error is comming from 
      mAdapter.notifyDataSetChanged(); 
     } 

     @Override 
     public void onMessageSendFail(Exception e) { 
      e.printStackTrace(); 
     } 
    }); 

Und der Fehler:

java.lang.UnsupportedOperationException 
at io.realm.RealmResults.add(RealmResults.java:576) 
at io.realm.RealmResults.add(RealmResults.java:63) 
at MessageDetailsActivity$2.onSendMessage(MessageDetailsActivity.java:294) 
at AsynchronousCalls.Group.Messages.FetchMessage$2 $1.run(FetchMessage.java:59) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Antwort

2

RealmResults ist eine Liste von Elementen für die Abfrageergebnisse, so wie die doc sagt, können Sie ein Element nicht hinzufügen zu ihm.

Aus dem Quellcode kann ich sehen, messageModel wurde in der Realm db gespeichert, so dass das einzige, was Sie tun müssen, ist RealmChangeListener zu notifyDataSetChanged() aufrufen. Die RealmResults wird zu diesem Zeitpunkt automatisch aktualisiert.

Siehe https://realm.io/docs/java/latest/#notifications