【问题标题】:java.lang.NumberFormatException: Invalid int: android.support.v7.widget.AppCompatEditTextjava.lang.NumberFormatException:无效的int:android.support.v7.widget.AppCompatEditText
【发布时间】:2017-09-25 17:03:18
【问题描述】:

我编写此代码是为了简化数学中的零件编号,例如2a/2b = a/b。 android studio 显示没有问题,但是当我运行此代码时:(maz 代表最低数字,liels 代表最高数字,skait 是上一个示例中的 2a,sauc 是上一个示例中的 2b int,skaitout 和 saucout 是输出文本零件编号parts对应的字段,skaitout是顶部编号,saucout是底部编号)

package com.example.mikus.simplify;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View skait = findViewById(R.id.skait);
        View sauc = findViewById(R.id.sauc);
        TextView skaitout = (TextView) findViewById(R.id.skaitout);
        TextView saucout = (TextView) findViewById(R.id.saucout);
        int maz;
        int liels;
        int x;
        int i = 0;
        maz = Integer.parseInt(skait.toString());
        liels = Integer.parseInt(sauc.toString());
        if(maz > liels){
            x = maz;
            maz = liels;
            liels = x;
            i = 1;
        }
        if(maz == liels){
            skaitout.setText('1');
            saucout.setText('1');
        }else{
            x = maz;
            while(true){
                if(maz % x == 0 && liels % x == 0){
                    maz /= x;
                    liels /= x;
                    x = maz;
                }else{
                    if(x == liels){
                        return;
                    }else{
                        x++;
                    }
                }

            }
        }
        if (i == 0) {
            skaitout.setText(maz);
            saucout.setText(liels);
        }
        if(i == 1){
            skaitout.setText(liels);
            saucout.setText(maz);
        }



    }
}

我得到了错误:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.mikus.simplify, PID: 24905
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mikus.simplify/com.example.mikus.simplify.MainActivity}: java.lang.NumberFormatException: Invalid int: "android.support.v7.widget.AppCompatEditText{11f3506 VFED..CL. ......ID 0,0-0,0 #7f0b0057 app:id/skait}"
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3256)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3352)
                      at android.app.ActivityThread.access$1100(ActivityThread.java:223)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:158)
                      at android.app.ActivityThread.main(ActivityThread.java:7231)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                   Caused by: java.lang.NumberFormatException: Invalid int: "android.support.v7.widget.AppCompatEditText{11f3506 VFED..CL. ......ID 0,0-0,0 #7f0b0057 app:id/skait}"
                      at java.lang.Integer.invalidInt(Integer.java:138)
                      at java.lang.Integer.parse(Integer.java:410)
                      at java.lang.Integer.parseInt(Integer.java:367)
                      at java.lang.Integer.parseInt(Integer.java:334)
                      at com.example.mikus.simplify.MainActivity.onCreate(MainActivity.java:23)
                      at android.app.Activity.performCreate(Activity.java:6877)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3209)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3352) 
                      at android.app.ActivityThread.access$1100(ActivityThread.java:223) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:158) 
                      at android.app.ActivityThread.main(ActivityThread.java:7231) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

在电话中程序只是崩溃了。谁能帮帮我。

【问题讨论】:

  • 你能分享你的activity_main.xml吗?目前尚不清楚skait 是什么类型的视图,以及它是否设置了任何默认值。

标签: android numbers integer


【解决方案1】:

您尝试将视图转换为字符串并将其解析为整数:

liels = Integer.parseInt(sauc.toString());
maz = Integer.parseInt(skait.toString());

我猜你想做这样的事情:

liels = Integer.parseInt(sauc.getText().toString());
maz = Integer.parseInt(skait.getText().toString());

此外,用户可能会输入错误。如果输入不是这样的数字,您可以捕获异常:

try{

 liels = Integer.parseInt(sauc.getText().toString());
    maz = Integer.parseInt(skait.getText().toString());

}catch(NumberFormatException ex){
 //inform the user about wrong input
}

或者您可以通过将此属性设置为 editTexts 来限制用户只能输入数字:

android:inputType="number"

请注意:稍后您还会通过设置文本获得例外:

  if (i == 0) {
            skaitout.setText(maz);
            saucout.setText(liels);
        }
        if(i == 1){
            skaitout.setText(liels);
            saucout.setText(maz);
        }

这将引发异常,您必须将整数转换为字符串,例如:

 if (i == 0) {
            skaitout.setText(Integer.toString(maz));
            saucout.setText(Integer.toString(liels));
        }
        if(i == 1){
            skaitout.setText(Integer.toString(liels));
            saucout.setText(Integer.toString(maz));
        }

或者只是例如带有一些退出标记:

saucout.setText(""+maz);

【讨论】:

    【解决方案2】:

    您正在尝试将 View 解析为 int

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 2015-12-14
      • 2016-04-29
      • 1970-01-01
      相关资源
      最近更新 更多