Java 更新RecyclerView onChildChanged Firebase
我正在尝试更新我的recyclerview,但出现了以下错误 java.lang.ArrayIndexOutOfBoundsException:长度=12;索引=-1 帮我解释一下这个逻辑。 如果我在Java 更新RecyclerView onChildChanged Firebase,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在尝试更新我的recyclerview,但出现了以下错误 java.lang.ArrayIndexOutOfBoundsException:长度=12;索引=-1 帮我解释一下这个逻辑。 如果我在onChildChanged中除了Notify之外没有做任何事情,那么它将创建重复的子项好的,我得到了它 您需要两个阵列来执行此操作。 // Lists private final List<ChatModel> lIndividualChats = new ArrayList<&
onChildChanged
中除了Notify
之外没有做任何事情,那么它将创建重复的子项
好的,我得到了它
您需要两个阵列来执行此操作。
// Lists
private final List<ChatModel> lIndividualChats = new ArrayList<>();
private ArrayList<String> mKeys = new ArrayList<>();
通过使用另一个简单字符串类型的数组,您将能够访问模型数组列表的索引。很可能是
上载的。indexOf(key)
找不到键,因此返回-1
。很难推测为什么这是基于您共享的代码。例如,上传是什么类型?它是如何找到一个键的索引的?@FrankvanPuffelen我正期待着你的回答:)。我已经为这项工作制定了工作方案。我需要修改此代码或发布答案?
// Lists
private final List<ChatModel> lIndividualChats = new ArrayList<>();
private ArrayList<String> mKeys = new ArrayList<>();
public void onChildAdded(@NonNull DataSnapshot dataSnapshot,
@Nullable String s) {
ChatModel chatModel = dataSnapshot.getValue(ChatModel.class);
lIndividualChats.add(chatModel);
chatsAdapter.notifyDataSetChanged();
String key = dataSnapshot.getKey();
mKeys.add(key);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot,
@Nullable String s) {
ChatModel chatModel = dataSnapshot.getValue(ChatModel.class);
String key = dataSnapshot.getKey();
int index = mKeys.indexOf(key);
lIndividualChats.set(index,
chatModel);
chatsAdapter.notifyDataSetChanged();
}