java试图保存10位数的电话号码,但抛出了无效的int错误
基本上,我有一个edittext框,通过xml限制为10个数字。当我输入任何小于7的值时,它会显示一个祝酒词。7个整数保存字符串。8或9个整数表示其适当的toast。然而,当我输入完整的10位数时,我得到了这个错误
09-28 15:29:11.312: E/AndroidRuntime(19193): java.lang.IllegalStateException: Could notexecute method of the activity
09-28 15:29:11.312: E/AndroidRuntime(19193): at 安卓.view.View$1.onClick(View.java:3830)
09-28 15:29:11.312: E/AndroidRuntime(19193): at 安卓.view.View.performClick(View.java:4445)
09-28 15:29:11.312: E/AndroidRuntime(19193): at 安卓.view.View$PerformClick.run(View.java:18446)
09-28 15:29:11.312: E/AndroidRuntime(19193): at 安卓.os.Handler.handleCallback(Handler.java:733)
09-28 15:29:11.312: E/AndroidRuntime(19193): at 安卓.os.Handler.dispatchMessage(Handler.java:95)
09-28 15:29:11.312: E/AndroidRuntime(19193): at 安卓.os.Looper.loop(Looper.java:136)
09-28 15:29:11.312: E/AndroidRuntime(19193): at 安卓.app.ActivityThread.main(ActivityThread.java:5140)
09-28 15:29:11.312: E/AndroidRuntime(19193): at java.lang.reflect.Method.invoke(Native Method)
09-28 15:29:11.312: E/AndroidRuntime(19193): at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
09-28 15:29:11.312: E/AndroidRuntime(19193): at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:611)
09-28 15:29:11.312: E/AndroidRuntime(19193): Caused by: java.lang.reflect.InvocationTargetException
09-28 15:29:11.312: E/AndroidRuntime(19193): at java.lang.reflect.Method.invoke(Native Method)
09-28 15:29:11.312: E/AndroidRuntime(19193): at 安卓.view.View$1.onClick(View.java:3825)
09-28 15:29:11.312: E/AndroidRuntime(19193): ... 9 more
09-28 15:29:11.312: E/AndroidRuntime(19193): Caused by: java.lang.NumberFormatException: Invalid int: "3557565542"
09-28 15:29:11.312: E/AndroidRuntime(19193): at java.lang.Integer.invalidInt(Integer.java:137)
09-28 15:29:11.312: E/AndroidRuntime(19193): at java.lang.Integer.parse(Integer.java:377)
09-28 15:29:11.312: E/AndroidRuntime(19193): at java.lang.Integer.parseInt(Integer.java:365)
09-28 15:29:11.312: E/AndroidRuntime(19193): at java.lang.Integer.parseInt(Integer.java:331)
而方法
public void onOk(View src) {
Product p = new Product();
p.name = _name.getText().toString();
p.number = Integer.parseInt(number.getText().toString());
if ((number.getText().toString().trim().length() == 7)) {
Toast.makeText(getApplicationContext(), "Please enter the full 10 digit phone number for best results", Toast.LENGTH_LONG).show();
Intent result = new Intent();
result.putExtra("product", p);
setResult(RESULT_OK, result);
finish();
}
else if (number.getText().toString().trim().length() < 7) {
Toast.makeText(getApplicationContext(), "Please enter at least 7 digits", Toast.LENGTH_LONG).show();
}
else if ((number.getText().toString().trim().length() == 8) || number.getText().toString().trim().length() == 9)) {
Toast.makeText(getApplicationContext(), "You entered " + _price.getText().toString().trim().length() + ". Please enter a 10 digit phone number.", Toast.LENGTH_LONG).show();
} else {
Intent result = new Intent();
result.putExtra("product", p);
setResult(RESULT_OK, result);
finish();
}
}
我已经尝试了我能想到的一切,但没有什么能解决它。我肯定这是我忽略了的
# 1 楼答案
java中int的最大值为2147483647,如果输入任何高于该值的内容,应用程序就会崩溃。尝试使用最大值为9223372036854775807的long
此外,如果你正在储存一个电话号码,我建议使用字符串,除非你需要对电话号码进行数学运算(不太可能)。有些电话号码有“+”、“*”、“#”等字符