RecyclerView点击跳转页面报错:Context.getPackageName()空对象引用
解决RecyclerView点击时Context.getPackageName()空指针异常
这个空指针问题很常见,核心原因就是你用来启动Activity的context对象变成null了。虽然你在contactHolder构造方法里传入了Activity,但如果Activity已经进入销毁状态,或者ViewHolder初始化时传的context本身就有问题,就会触发这个报错。
给你两个关键修复点,既能解决当前问题,还能避免潜在的内存泄漏:
1. 改用View关联的Context,不要直接持有Activity引用
直接持有Activity的强引用很容易导致内存泄漏,而且一旦Activity销毁,这个context就失效了。我们可以用点击事件里的View来获取它关联的有效Context:
修改你的ViewHolder构造方法和点击事件:
public contactHolder(View itemView) { super(itemView); Fname = itemView.findViewById(R.id.getFname); Lname = itemView.findViewById(R.id.getLname); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startAnew(v, contactID); } }); }
2. 完善startAnew方法,增加空判断
在启动Activity前先检查Context是否有效,避免意外报错:
private void startAnew(View view, String currentcontactID) { Context context = view.getContext(); if (context != null) { Intent intent = new Intent(context, personActivity.class); intent.putExtra(CONTACT_ID, currentcontactID); context.startActivity(intent); } }
这样修改后,你既解决了Context空指针的问题,又避免了因为持有Activity引用带来的内存泄漏风险。另外别忘了确认contactID在点击时已经被正确赋值,不然可能会出现新的问题哦。
内容的提问来源于stack exchange,提问作者Slim
相关产品推荐
相关产品推荐

