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

Android Studio中如何将MainActivity计算的变量通过Intent传递给另一个Activity

显式Intent传递计算总金额的修复方案
  • 核心问题1:result_total_Last 仅声明未绑定布局ID,大概率触发空指针异常,导致赋值、取值都失败
  • 核心问题2:未做输入校验和触发逻辑校验,若未先触发calculateTotal方法就点击跳转,传递的是空值
  • 核心问题3:第二个Activity的取值逻辑如果未放在onCreate生命周期方法中,会导致控件初始化失败、取值不生效

第一步:MainActivity全局初始化逻辑

在MainActivity的onCreate方法中补充控件绑定:

// 全局变量声明
TextView result_total_Last;
RadioButton radio_days;
EditText number;
Button book_btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 补充所有控件绑定,括号内替换为你自己布局文件中对应的ID
    result_total_Last = findViewById(R.id.result_total_Last的布局ID);
    radio_days = findViewById(R.id.radio_days的布局ID);
    number = findViewById(R.id.number_user);
    book_btn = findViewById(R.id.book_btn的布局ID);

    // 后续放置你原来的book_btn点击监听逻辑
}

第二步:补充计算方法的校验逻辑,避免崩溃

public void calculateTotal(View view) {
    // 先判断输入是否为空
    if(number.getText().toString().trim().isEmpty()){
        Toast.makeText(this,"请输入数量",Toast.LENGTH_SHORT).show();
        return;
    }
    int num = Integer.parseInt(number.getText().toString().trim());
    String result_total;
    if (radio_days.isChecked()) {
        result_total = String.valueOf(num * 50);
    } else {
        result_total = String.valueOf(num * 1000);
    }
    result_total_Last.setText("the total is" + result_total);
}

第三步:跳转逻辑补充非空判断

book_btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (ValidateEmailAddress(email)) {
            String result_intent = result_total_Last.getText().toString().trim();
            // 先判断总金额是否为空
            if(result_intent.isEmpty()){
                Toast.makeText(MainActivity.this,"请先计算总金额",Toast.LENGTH_SHORT).show();
                return;
            }
            Intent intent = new Intent(MainActivity.this, Confirmation_interface.class);
            intent.putExtra("total", result_intent);
            startActivity(intent);
        }
    }
});

第四步:第二个Activity取值逻辑确保放在onCreate中

public class Confirmation_interface extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 必须先设置布局再findViewById
        setContentView(R.layout.activity_confirmation_interface);
        Intent intent = getIntent();
        String total = intent.getStringExtra("total");
        TextView Total_result = findViewById(R.id.Total_ET);
        if(total!=null){
            Total_result.setText(total);
        }else{
            Total_result.setText("总金额获取失败");
        }
    }
}

额外优化建议

  • 所有控件必须先调用findViewById绑定布局ID后才能调用setText、getText方法
  • 建议优先传递数值类型(比如int)而非拼接后的字符串,后续修改展示格式更灵活,传int写法为:intent.putExtra("total", num*50); 第二个页面取值用getIntExtra("total",0)

内容的提问来源于stack exchange,提问作者rtd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:01