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

Android中Activity A向B传值时B出现FormatException错误求助

问题分析与解决方案

嘿,我一眼就瞅出问题出在哪啦!你在Activity A里犯了个很容易踩的小坑:你把EditText对象本身转成String传递了,而不是获取用户输入的文本内容。

你看,String.valueOf(set_limit)得到的是EditText对象的内存地址字符串(类似android.widget.EditText@abc123),完全不是用户输入的数字。当Activity B尝试把这个奇怪的字符串转成数字时,肯定会抛出FormatException呀!

下面是修复后的代码,还加了安全处理的细节:

Activity A 修复代码

EditText set_limit = findViewById(R.id.editText2);
// 先获取用户输入的文本,记得trim掉前后空格
String inputText = set_limit.getText().toString().trim();
Bundle set_limit_basic = new Bundle();
// 传递用户实际输入的内容,而不是EditText对象
set_limit_basic.putString("limit_basic", inputText);
Intent Aintent = new Intent(A.this, B.class);
Aintent.putExtras(set_limit_basic);
startActivity(Aintent);

Activity B 安全处理代码

接收数据时一定要做校验,避免空值或非法格式导致的异常:

Bundle set_limit_basic = getIntent().getExtras();
if (set_limit_basic != null) {
    String limitStr = set_limit_basic.getString("limit_basic");
    // 先检查字符串不为空且是有效数字格式
    if (limitStr != null && !limitStr.isEmpty()) {
        try {
            int limitNumber = Integer.parseInt(limitStr);
            // 这里就可以放心使用这个数字啦
        } catch (NumberFormatException e) {
            // 处理用户输入非数字的情况,比如弹个提示
            e.printStackTrace();
        }
    } else {
        // 处理用户没输入内容的情况
    }
}

额外小建议

如果确定要传递的是整数,其实可以直接用putInt()和getInt(),这样能减少字符串转换的风险:

  • Activity A 里(记得先校验输入是有效数字):
    // 先确保输入是有效数字,不然这里会抛异常,建议加try-catch
    int limitNum = Integer.parseInt(inputText);
    set_limit_basic.putInt("limit_basic", limitNum);
    
  • Activity B 里直接获取:
    int limitNumber = set_limit_basic.getInt("limit_basic", 0); // 0是默认值,如果没拿到数据就用这个
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:45:14