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

