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

onBindViewHolder调用.get(position)遇空对象引用错误,求解决方法

解决RecyclerView Adapter中get(position)的空指针问题

兄弟,这个问题太常见了!你遇到的NullPointerException本质上是因为你的event_list列表对象压根没被初始化,或者被错误设置成了null,就直接去调用get(position)方法了,系统自然就报错了。

咱们先看日志里的关键报错信息:

java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference

这句话直白点说就是:你试图在一个null的List对象上调用get方法,这肯定不行呀!

具体修复方案:

1. 从源头保证列表非空(最关键)

不管是通过构造方法传入列表,还是后续用set方法更新,都要确保event_list永远不会是null。比如在Adapter的构造方法里做处理:

private List<Event> event_list;

// 构造方法
public EventRecyclerAdapter(List<Event> eventList) {
    // 如果传入的列表是null,就初始化一个空的ArrayList兜底
    this.event_list = eventList != null ? eventList : new ArrayList<>();
}

如果是后续动态更新列表,对应的set方法也要做同样的判断:

public void updateEventList(List<Event> newEventList) {
    this.event_list = newEventList != null ? newEventList : new ArrayList<>();
    notifyDataSetChanged(); // 别忘了通知RecyclerView刷新数据
}

2. 在onBindViewHolder里加防御性检查(双重保险)

虽然从源头解决是最优解,但加一层判断能避免一些意外情况(比如列表越界、单个元素为null):

@Override 
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    // 先判断列表是否非空,且position在合法范围内
    if (event_list != null && position >= 0 && position < event_list.size()) {
        Event currentEvent = event_list.get(position);
        // 再判断当前元素是否非空
        if (currentEvent != null) {
            String desc_data = currentEvent.getDesc();
            holder.setDescText(desc_data);
        } else {
            // 元素为空时设置默认文本
            holder.setDescText("暂无描述");
        }
    } else {
        // 列表为空或位置不合法时的兜底处理
        holder.setDescText("暂无数据");
    }
}

3. 检查数据传递的时机

还要确认你是不是在RecyclerView初始化之后,才给Adapter设置了数据?如果Adapter先绑定到RecyclerView,而event_list还没被赋值,也会触发这个错误。所以要确保先给Adapter设置好非空的列表,再把Adapter绑定到RecyclerView,或者在设置数据后调用notifyDataSetChanged()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:26:44