Android Intent传参时getIntExtra()始终返回默认值0的问题
问题原因
核心故障点是Intent传参与取参的value类型不匹配:
MainActivity中写入EXTRA_NUMBER参数时,传入的是editText2.getText().toString()生成的String类型值,没有做类型转换;但Activity2读取参数时调用的是getIntExtra()方法,该方法只会匹配Intent中存储的int类型同名参数,类型不匹配时无法读取到目标值,就会直接返回传入的默认值0。
修复方案
两种修复方式二选一即可,推荐优先选第一种,从传参源头统一类型:
- 方案1:传参阶段就将输入内容转为int类型,和取参逻辑对齐
修改MainActivity中openActivity2方法的对应代码,增加类型转换和输入合法性校验,避免非数字输入触发崩溃:
修改完成后,Activity2中原有的public void openActivity2(){ EditText editText1 = (EditText) findViewById(R.id.edittext1); String text = editText1.getText().toString(); EditText editText2 = (EditText) findViewById(R.id.edittext2); int number = 0; // 捕获非数字输入的异常,防止崩溃 try { number = Integer.parseInt(editText2.getText().toString().trim()); } catch (NumberFormatException e) { // 可在此处增加输入不合法的提示,比如Toast提醒用户输入正确数字 e.printStackTrace(); } Intent intent = new Intent(this, Activity2.class); intent.putExtra(EXTRA_TEXT, text); intent.putExtra(EXTRA_NUMBER, number); startActivity(intent); }getIntExtra()读取逻辑不需要改动,即可正常获取数值。 - 方案2:取参阶段先按String类型读取,拿到值后再转换为int
如果不想修改传参逻辑,就调整Activity2中的参数读取代码:protected void onCreate(Bundle savedInstanceState) { ....... Intent intent=getIntent(); String text = intent.getStringExtra(MainActivity.EXTRA_TEXT); int num = 0; String numberStr = intent.getStringExtra(MainActivity.EXTRA_NUMBER); // 同样需要做异常捕获 try { num = Integer.parseInt(numberStr.trim()); } catch (NumberFormatException e) { e.printStackTrace(); } }
注意:所有从EditText获取用户输入再转数字的场景,都必须增加数字格式异常的捕获逻辑,否则用户输入非数字内容、空内容时,会直接触发应用崩溃。
内容的提问来源于stack exchange,提问作者MOLO
相关产品推荐
相关产品推荐

