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
相关产品推荐
相关产品推荐

