领域模型从其他线程更新但应通知适配器

时间:2016-04-22 10:44:14

标签: android multithreading realm

我在websocket onReponse方法中从适配器向Websocket发送消息我正在更新Realm Model类但是进程正在后台进行而不是向前移动: 在这里你可以查看我的代码:

public static void updateMsgStatus(String userId,                                     字符串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());什么都没有在后台进行,但我在这里等待:

如果我在这个方法中创建自己的线程,那么realm将不会通知适配器 在此先感谢:)

2 个答案:

答案 0 :(得分:2)

您可以在绑定/呈现数据的领域实例上使用更改侦听器,文档here。 因为我确定你会成像,这会通知您订阅的对象的更改。

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);

答案 1 :(得分:0)

您使用的是什么类型的适配器? 如果这是默认值,您可以尝试使用类似

的内容
runOnUiThread(new Runnable() {
        @Override
        public void run() {
            mAdapter.notifyItemChanged(positionOfItemToChange);
        }
    });