You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Firebase列表报错:ArrayIndexOutOfBoundsException索引-1问题

解决java.lang.ArrayIndexOutOfBoundsException: index=-1问题

首先咱们直接定位核心问题:你碰到的index=-1错误,是因为mPostModelList.indexOf(post)返回了-1——这说明当前列表里找不到你从Firebase获取到的这个Post对象,后续调用get(-1)自然就触发数组越界异常了。

为什么会找不到?因为List.indexOf()是靠对象的equals()方法判断匹配度的,如果你的Post类没有正确重写equals()和hashCode()方法,哪怕两个Post对象的内容完全一致,Java也会把它们当成不同的对象,自然就找不到匹配项,返回-1了。

具体解决方法

方法一:重写Post类的equals()和hashCode()

用帖子的唯一标识(比如Firebase里的key)来重写这两个方法,让Java能正确识别同一个帖子对象。示例代码如下:

public class Post {
    // 你的其他字段
    private String postKey; // 存储Firebase中该帖子的唯一key

    // 构造函数、getter、setter方法...

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Post post = (Post) o;
        return Objects.equals(postKey, post.postKey);
    }

    @Override
    public int hashCode() {
        return Objects.hash(postKey);
    }
}

这样indexOf()就能正确定位到列表中的对应帖子了。

方法二:直接遍历列表匹配key(更稳妥)

如果你不想修改Post类,也可以直接遍历列表,通过帖子的唯一key找到目标元素,避免依赖equals()方法:

// 替换原来出错的代码段
String targetPostDesc = null;
int targetIndex = -1;
String targetKey = dataSnapshot.getKey();

// 遍历列表找对应key的帖子
for (int i = 0; i < mPostModelList.size(); i++) {
    Post currentPost = mPostModelList.get(i);
    if (targetKey.equals(currentPost.getPostKey())) { // 假设Post有getPostKey()方法
        targetIndex = i;
        targetPostDesc = currentPost.getDesc();
        break;
    }
}

if (targetIndex != -1) {
    Toast.makeText(mView.getContext(), targetPostDesc, Toast.LENGTH_SHORT).show();
    mPostModelList.remove(targetIndex); // 如果需要移除该帖子
    mAdapter.notifyDataSetChanged();
} else {
    // 可选:没找到时打个日志提示
    Log.d("PostRemoval", "帖子key " + targetKey + " 不在列表中");
}

额外注意事项

  • 确保mPostModelList中的每个Post对象都正确保存了Firebase返回的帖子key,不然无论是indexOf()还是遍历都找不到目标。
  • 你原来注释掉了mPostModelList.remove(post);,如果需要移除元素,用索引remove(targetIndex)比直接移除对象更可靠。

内容的提问来源于stack exchange,提问作者Cariweb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:27:09