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

Android Intent传参时getIntExtra()始终返回默认值0的问题

问题原因

核心故障点是Intent传参与取参的value类型不匹配:
MainActivity中写入EXTRA_NUMBER参数时,传入的是editText2.getText().toString()生成的String类型值,没有做类型转换;但Activity2读取参数时调用的是getIntExtra()方法,该方法只会匹配Intent中存储的int类型同名参数,类型不匹配时无法读取到目标值,就会直接返回传入的默认值0。

修复方案

两种修复方式二选一即可,推荐优先选第一种,从传参源头统一类型:

  • 方案1:传参阶段就将输入内容转为int类型,和取参逻辑对齐
    修改MainActivity中openActivity2方法的对应代码,增加类型转换和输入合法性校验,避免非数字输入触发崩溃:
    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);
    }
    
    修改完成后,Activity2中原有的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:48:14