Android开发问题:无法将表单Activity的值传递至目标Activity
问题描述
我想从表单Activity通过Intent跳转至MainActivity并传递数据,但检查代码后仍找不到问题所在。运行模拟器时只能打开MainActivity,无法获取传递的表单值。
表单Activity的传值代码
Sname_i = Sname.getText().toString(); Fname_i = Fname.getText().toString(); Mname_i = Mname.getText().toString(); Type = Bloodtype.getText().toString(); Color = Eyecolor.getText().toString(); Birthdate = Dob.getText().toString(); Birthplace = Pob.getText().toString(); Address_i = Address.getText().toString(); int selected_gender = radiogroup1.getCheckedRadioButtonId(); radiobtn = findViewById(selected_gender); gender = radiobtn.getText().toString(); Intent i; i = new Intent(form.this, MainActivity.class); i.putExtra("Sname", Sname_i); i.putExtra("Fname", Fname_i); i.putExtra("Mname", Mname_i); i.putExtra("bloodtype", Type); i.putExtra("eyecolor", Color); i.putExtra("Bd", Birthdate); i.putExtra("Bp", Birthplace); i.putExtra("Add", Address_i); i.putExtra("gender", gender); startActivity(i); finish();
MainActivity的取值代码
Sname = intent.getStringExtra("Sname"); Fname = intent.getStringExtra("Fname"); Mname = intent.getStringExtra("Mname"); names = Sname + " " + Fname + " " + Mname + " "; type = intent.getStringExtra("bloodtype"); color = intent.getStringExtra("eyecolor"); Birthdate = intent.getStringExtra("Bd"); Birthplace = intent.getStringExtra("Bp"); address_i = intent.getStringExtra("Add"); gender_i = intent.getStringExtra("gender"); name.setText(names); Dob.setText(Birthdate); gender.setText(gender_i); Pob.setText(Birthplace); Address.setText(address_i); bloodtype.setText(type); eyecolor.setText(color);
排查方向及解决办法
确认Intent对象来源
MainActivity里的intent必须是通过getIntent()获取的当前Activity关联的Intent,不能是新建的实例。正确写法:Intent intent = getIntent();建议在
onCreate方法内完成取值逻辑,确保时机正确。处理空值避免异常
表单输入可能为空,直接拼接字符串或设置文本会触发空指针异常,导致逻辑中断。可以给空值设置默认值:Sname = intent.getStringExtra("Sname") != null ? intent.getStringExtra("Sname") : ""; Fname = intent.getStringExtra("Fname") != null ? intent.getStringExtra("Fname") : ""; Mname = intent.getStringExtra("Mname") != null ? intent.getStringExtra("Mname") : ""; names = Sname + " " + Fname + " " + Mname;检查RadioGroup选中状态
如果RadioGroup没有选中任何选项,selected_gender会返回-1,此时findViewById(-1)得到null,调用getText()会抛异常,直接打断跳转流程。要加判断:int selected_gender = radiogroup1.getCheckedRadioButtonId(); if(selected_gender != -1){ radiobtn = findViewById(selected_gender); gender = radiobtn.getText().toString(); } else { gender = ""; // 给默认值保证传值逻辑正常执行 }核查Activity启动模式
查看AndroidManifest.xml中MainActivity的启动模式,如果是singleTask或singleInstance,会复用已存在的Activity实例,新Intent的数据无法被onCreate获取。可以临时移除启动模式测试,或者在onNewIntent中处理新数据:@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); // 更新当前Intent对象 // 重新执行取值和UI设置逻辑 }日志定位问题
在表单Activity跳转前打印要传递的数据,确认数据是否正确获取:Log.d("FormActivity", "Sname: " + Sname_i + ", Gender: " + gender);在MainActivity中打印接收到的数据,确认传值链路是否正常:
Log.d("MainActivity", "Received Sname: " + Sname);
内容的提问来源于stack exchange,提问作者Mark Lhenard Paragas
相关产品推荐
相关产品推荐

