2016-04-22 10 views
3

websocketのWebSocketでWebsocketにメッセージを送信していますが、Realm Modelクラスを更新していますが、プロセスはバックグラウンドで進行中ではありません: ここから自分のコードを見ることができます:Realmモデルは他のスレッドから更新しますが、アダプタに通知する必要があります

パブリック静的ボイドupdateMsgStatus(文字列ユーザーID、 ストリングのmessageId、 MSG_STATUS msgStatus){この行に

Realm realm = Realm.getDefaultInstance(); 

    Message message = realm.where(Message.class) 
      .equalTo(Message.USER_ID, userId) 
      .equalTo(Message.MESSAGE_ID, messageId).findFirst(); 

    realm.beginTransaction(); 
    message.setMsgStatus(msgStatus.ordinal()); 
    realm.copyToRealmOrUpdate(message); 
    realm.commitTransaction(); 
} 

message.setMsgStatus(msgStatus.ordinal())。何も後にバックグラウンドで行くんが、私はここで待っています:

私はこの方法で私自身のスレッドを作成していた場合、その後レルムアダプタに事前に 感謝を通知しません:)

+0

RealmChangeListener()を使用してください。 –

答えて

2

ようなものを使用しようとすることができ、デフォルトの1がある場合。 イメージングすれば、あなたが購読しているオブジェクトの変更が通知されるはずです。

realm = Realm.getDefaultInstance(); 
RealmResults<Message> messages = realm.where(Message.class).findAllAsync(); 

messageChangeListener = new RealmChangeListener() { 
    @Override 
    public void onChange() { 
     // update your dataset 
     mAdapter.notifyDataSetChanged(); 
    } 
}; 
messages.addChangeListener(messageChangeListener); 
+0

ありがとう@Duncanよく働いています:) –

+0

@pradeepbishnoi No probs :) –

0

使用しているアダプタのどのような? これはあなたがちょうどあなたがあなたのデータは、レンダリング/ドキュメントhereをバインドされているレルムインスタンス上変更リスナーを使用使用することができ

runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      mAdapter.notifyItemChanged(positionOfItemToChange); 
     } 
    }); 
+0

しかし、メッセージはバックグラウンドで入ってきますので、ここではこのメソッドではアクティビティがなく、このRealmBaseAdapterを使用しています

+0

このスコープを実行するコンテキストobjを使用できます。たとえば、メッセージを更新しようとしているクラスにコンテキストインスタンスをパラメータとして渡して、次のように使用することができます。 context.runOnUiThread –

関連する問題