Android开发中调用listener.onDataClick抛空指针异常该如何修复?
问题定位
根据崩溃日志可以直接定位到空指针触发点是listener.onDataClick()调用处,说明此时listener实例为null,顺着实例传递链路排查即可:
- 首先确认Adapter构造方法中已经正确将传入的listener参数赋值给全局变量,你的代码中这一步逻辑正确
- 进一步排查Adapter初始化时传入的参数,发现Fragment中声明的
OnDataClickListener p仅做了变量声明、没有赋值,默认值为null,你将空值的p传入Adapter,直接导致后续调用时报错。
修复方案
核心修复
你的HttpFragment已经实现了OnDataClickListener接口,不需要额外声明p变量,初始化Adapter时直接传入当前Fragment实例即可:
将Fragment中创建Adapter的代码:
WifiShareAdapter appsAdapter = new WifiShareAdapter(this.getContext(), appu,p);
修改为:
WifiShareAdapter appsAdapter = new WifiShareAdapter(this.getContext(), appu, this);
同时可以删除无用的OnDataClickListener p;声明,避免后续误操作。
健壮性优化(推荐)
在Adapter调用listener的位置增加非空判断,避免后续其他场景误传空值时触发崩溃:
public void onBindViewHolder(@NonNull AppViewHolder holder, int position) { if (listener != null) { listener.onDataClick(apps.get(position),true); } }
内容的提问来源于stack exchange,提问作者jcooli
相关产品推荐
相关产品推荐

