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

点击RecyclerView Adapter中跳转外部网站按钮时App崩溃求助

问题原因

该空指针异常是BookImagesAdapter中持有的全局Context引用为空导致的,触发场景多为:用户点击按钮时,关联的BookImages Activity已经销毁(如用户刚按下返回键退出页面),此时存储的全局Context引用已被释放,调用startActivity就会触发空指针。

修复方法

最优方案:使用点击控件自带的Context(无需依赖全局Context引用)

修改onBindViewHolder中Amazon按钮的点击逻辑,直接用点击事件传入的view获取Context即可,修改后的代码如下:

@Override
protected void onBindViewHolder(@NonNull ImagesViewHolder holder, int position, @NonNull BookImagesModel model) {
    Glide.with(holder.Image.getContext()).load(model.getImage()).into(holder.Image);
    holder.Amazon.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String amazonUrl = model.getAmazon();
            // 额外加链接非空判断,避免解析异常
            if (amazonUrl == null || amazonUrl.trim().isEmpty()) {
                return;
            }
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(amazonUrl));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            // 直接用点击控件的Context,触发点击时控件必然依附于窗口,Context不会为空
            view.getContext().startActivity(intent);
        }
    });
}

如果后续需要给Flipkart按钮加同类跳转逻辑,也采用相同写法即可。

兜底方案:给全局Context加空校验

如果需要保留现有全局Context的写法,仅需在调用startActivity前增加非空判断即可:

@Override
public void onClick(View view) {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(model.getAmazon()));
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if (context != null) {
        context.startActivity(intent);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:24:04