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

RecyclerView点击弹Toast崩溃:Context空指针异常求助

问题根源

崩溃的核心原因是Adapter中的Context为null:在MainActivity的onCreate方法中,你先创建了DetailsAdapter并传入了未初始化的context变量(此时它的值是null),之后才给context赋值,导致Adapter内部保存的Context始终是null,调用Toast.makeText时触发空指针异常。

解决方法

有两种可靠的修复方式,任选其一即可:

方法1:提前初始化Context再创建Adapter

修改MainActivity的onCreate方法,先完成Context初始化,再创建Adapter:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = findViewById(R.id.textView);
    recyclerView = findViewById(R.id.recyclerview);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    // 先初始化context
    context = getApplicationContext();
    // 传入已初始化的context创建Adapter
    detailsAdapter = new DetailsAdapter(detailsList, context);
    recyclerView.setAdapter(detailsAdapter);

    getDetails();
}

或者更简化,直接传入this(MainActivity本身就是Context实例),无需单独定义context变量:

// 删除MainActivity中的Context context;声明
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = findViewById(R.id.textView);
    recyclerView = findViewById(R.id.recyclerview);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    // 直接传入this作为Context
    detailsAdapter = new DetailsAdapter(detailsList, this);
    recyclerView.setAdapter(detailsAdapter);

    getDetails();
}

方法2:使用View自带的Context(更推荐)

不依赖Adapter保存的Context,直接从点击的View中获取有效Context,既避免空指针,也能降低内存泄漏风险:
修改DetailsAdapter中onBindViewHolder的点击事件代码:

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 使用view.getContext()获取当前有效Context
        Toast.makeText(view.getContext(), "item clicked!!", Toast.LENGTH_SHORT).show();
    }
});

内容的提问来源于stack exchange,提问作者Subhashana.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:05:23