我正在使用RealmRecyclerViewAdapter
并正在使用RealmResult
作为我的数据集。当从Activity活动更新RealmList时,Android - rowIndex小于0
这里的适配器代码:
private RealmList<MessageItem> mDataset;
public ChatRoomAsUserAdapter(Context context, @Nullable RealmList<MessageItem> data) {
super(data, true);
this.context = context;
this.userId = Utilities.getUserInformation(context, SharedPreferencesList.userIDString);
this.mDataset = data;
}
以下是我找到的聊天室初始化在活动的RealmResult:
AppController.realm.beginTransaction();
// Getting chat inside the specific room id
ChatRoomWrapper chatFriendRealmResult = AppController.realm.where(ChatRoomWrapper.class)
.equalTo(ChatRoomWrapperFields.ROOM_ID, roomId).findFirst();
if (chatFriendRealmResult != null){
chatRoomAsUserAdapter = new ChatRoomAsUserAdapter(this, chatFriendRealmResult.message);
AppController.realm.commitTransaction();
}
...
初始化之后,我做了一个API调用和结果:
chatRoomWrapper.message.deleteAllFromRealm();
chatRoomWrapper.message.addAll(api.res.message_item_list);
Appcontroller.realm.copyToRealmOrUpdate(chatRoomWrapper);
而且我得到这个错误:
java.lang.ArrayIndexOutOfBoundsException: rowIndex is less than 0.
at io.realm.internal.LinkView.nativeGetTargetRowIndex(Native Method)
at io.realm.internal.LinkView.getTargetRowIndex(LinkView.java:82)
at io.realm.RealmList.get(RealmList.java:452)
这是否意味着RV的内容意外发生了变化?我正在使用RealmRecyclerViewAdapter
哪个应该处理这个权利?
UPDATE:
这里是我如何获取数据的例子:
getItem(position).getMsg_date();
其中
public class MessageItem extends RealmObject {
...
public String msg_date = "";
}
编辑:
这是我如何更新适配器从服务器获取信息后:
AppController.realm.beginTransaction();
// Create new ChatFriendWrapper and input the Room ID into it to update
// the Room ID if found
ChatRoomWrapper chatRoomWrapper = AppController.realm.where(ChatRoomWrapper.class)
.equalTo("room_id", roomId).findFirst();
if (chatRoomWrapper != null) {
if (output.flag.equals(Constants.flagRefresh)) {
counter = 0;
chatRoomWrapper.message.deleteAllFromRealm();
chatRoomWrapper.message.addAll(output.message_item_list);
MIApplication.realm.copyToRealmOrUpdate(chatRoomWrapper);
manager.scrollToPosition(0);
} else if (output.flag.equals(Constants.flagLoad)) {
chatRoomWrapper.message.addAll(output.message_item_list);
AppController.realm.copyToRealmOrUpdate(chatRoomWrapper);
}
} else {
ChatRoomWrapper newChatRoomWrapper = new ChatRoomWrapper();
newChatRoomWrapper.room_id = roomId;
newChatRoomWrapper.message.addAll(output.message_item_list);
AppController.realm.copyToRealmOrUpdate(newChatRoomWrapper);
setupChatRoom();
}
AppController.realm.commitTransaction();
什么版本的Realm是这个? – EpicPandaForce
The Fabled @EpicPandaForce!它是领域3.1.2,我喜欢你的名字BTW:D –
有时我觉得我应该在更多的地方使用这个名字,但是唉:我也喜欢它,它很好搜索。 Anyhoo,你可能想要删除'this.mDataset = data;'和'mDataset',并使用'getData()'''updateData()'来代替。 – EpicPandaForce