Android跨Activity传int时try块内Button点击无响应如何解决
问题根源
- 你当前的代码是在
FirstActivity初始化阶段就尝试读取EditText的输入值并解析,此时用户还未完成输入,inputCorrect.getText().toString()大概率是空值或者非法数值,直接触发NumberFormatException走catch分支,给按钮设置点击事件的逻辑完全没执行,所以点击按钮无响应。 - 你把点击事件移出try块后找不到
resultPage变量,是因为该变量是在try块内部声明的,属于块级作用域,外部无法访问。
解决方法
把读取输入、解析数值、创建Intent的逻辑全部移到按钮的点击事件回调内部执行,操作顺序改成:用户点击按钮时,才去读输入框内容、校验合法性、再跳转传值。
修改后FirstActivity参考代码
EditText inputCorrect = findViewById(R.id.inputCorrect); Button calcButton = findViewById(R.id.calculateButton); // 初始化阶段就完成按钮点击事件注册 calcButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 点击时再读取输入内容做解析 try { int correctAmount = Integer.parseInt(inputCorrect.getText().toString()); Intent resultPage = new Intent(getApplicationContext(), resultActivity.class); resultPage.putExtra("c_a", correctAmount); startActivity(resultPage); } catch (NumberFormatException nfe) { // 非法输入时给用户明确提示,不要空吞异常 Toast.makeText(FirstActivity.this, "请输入合法的数字", Toast.LENGTH_SHORT).show(); } } });
SecondActivity代码优化建议
增加空值兼容,避免取不到参数时崩溃:
// 第二个参数为取不到对应值时的默认值,可根据业务需求调整 int value = getIntent().getIntExtra("c_a", 0);
内容的提问来源于stack exchange,提问作者Farzad Moradkhani
相关产品推荐
相关产品推荐

