有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    java中int的最大值为2147483647,如果输入任何高于该值的内容,应用程序就会崩溃。尝试使用最大值为9223372036854775807的long

    此外,如果你正在储存一个电话号码,我建议使用字符串,除非你需要对电话号码进行数学运算(不太可能)。有些电话号码有“+”、“*”、“#”等字符