从列表Fragment向新Activity传值时获取Null的问题排查
问题分析与解决办法
嘿,我一眼就瞅出问题所在啦!你遇到的Null值问题,核心原因是Intent传递的数据类型和你获取的类型不匹配,咱们一步步来解决:
1. 核心问题:类型不匹配
你在RecyclerView Adapter的点击事件里,传递的是int类型的patient_id:
int patient_id = mValues.get(position).getPatient_id(); i.putExtra("patient_id", patient_id); // 这里传的是int类型
但在PatientProfile的onCreate里,你用了getStringExtra()方法来获取:
String patient_id_str = intent.getStringExtra("patient_id");
getStringExtra()只能获取字符串类型的Extra数据,你传的是int,自然拿不到,返回Null。
2. 两种解决办法
办法一:转成字符串再传递
修改Adapter里的代码,把int转成String后再放入Intent:
Intent i = new Intent(context, PatientProfile.class); i.putExtra("patient_id", String.valueOf(patient_id)); // 转成String context.startActivity(i);
这样你原来目标Activity里的getStringExtra()代码就能正常拿到值了。
办法二:用对应类型的方法获取
保持Adapter的代码不变,修改目标Activity的获取逻辑,用getIntExtra()来拿int类型的数据:
Intent intent = getIntent(); // 第二个参数是默认值,如果没拿到数据就返回-1,你可以根据业务调整 int patient_id = intent.getIntExtra("patient_id", -1); String patient_id_str = String.valueOf(patient_id); Toast.makeText(getApplicationContext(), "Load Patient : " + patient_id_str, Toast.LENGTH_LONG).show();
记得可以加个判断,比如如果patient_id == -1,可以提示用户数据加载失败之类的。
额外小检查
另外确认下你的PatientProfile已经在AndroidManifest.xml里注册了,不过你能跳转到这个页面,应该是已经注册过的,这个大概率不是问题。
内容的提问来源于stack exchange,提问作者user2301765
相关产品推荐
相关产品推荐

