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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:25:21