我正在使用RealmResult
并使用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;
}
作为我的数据集。
这是适配器代码:
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();
}
...
以下是我在Activity中为聊天室初始化找到RealmResult的方法:
chatRoomWrapper.message.deleteAllFromRealm();
chatRoomWrapper.message.addAll(api.res.message_item_list);
Appcontroller.realm.copyToRealmOrUpdate(chatRoomWrapper);
初始化后,我进行API调用,结果如下:
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)
我收到了这个错误:
RealmRecyclerViewAdapter
这是否意味着RV的内容意外更改?我正在使用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();
编辑:
这是我从服务器获取信息后更新适配器的方法:
class Test {
def test() {
String.format("%s",1)
String.format("%s","x")
String.format("%s",3)
String.format("%s","x")
String.format("%s",5)
}
}
答案 0 :(得分:0)
罪魁祸首是使用position
代替holder.getAdapterPosition()
来获取该项目。我曾经这样做过:
viewholder.message.setText(getItem(position).message);
现在是
viewholder.message.setText(getItem(holder.getAdapterPosition()).message);
它清除了错误。我突然想起曾经在RecyclerView
中无限滚动的问题,我也遇到过这种错误。