当前位置: 首页 > 知识库问答 >
问题:

将输入字符串解析为整数似乎会使我的应用程序崩溃

况喜
2023-03-14

我开始学习android,我的第一个练习是计算器。在做适当的计算器之前,我计划创建一个非常基本的应用程序,用户只需通过EditText输入2个数字,用按钮选择算术运算,并在按下“igual”按钮时在TextView中获得结果。

我的想法是声明2个字符串(sinput1

在我开始编写操作的工作方式之前,所有布局看起来都运行良好,但是每次我运行应用程序(使用手机或模拟器)时,当我按EditText输入数字时,它都会崩溃。我会把我的代码放在这里,也许我的错误在别处。

我认为改变onClick void上的开关工作方式可以解决这个问题,部分原因是因为我以前有一系列的if,应用程序甚至在加载布局之前就崩溃了。但现在我卡在了这一点上。

    package com.example.caye.colores;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    Button mas;
    Button menos;
    Button por;
    Button div;
    Button igual;

    EditText num1;
    EditText num2;

    TextView letrero1;
    TextView letrero2;
    TextView resultado;

    int input1;
    int input2;
    String sinput1;
    String sinput2;
    int operacion;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mas = (Button)this.findViewById(R.id.mas);
        mas.setOnClickListener(this);
        mas.setText("+");
        menos = (Button)this.findViewById(R.id.menos);
        menos.setOnClickListener(this);
        menos.setText("-");
        por = (Button)this.findViewById(R.id.por);
        por.setOnClickListener(this);
        por.setText("*");
        div = (Button)this.findViewById(R.id.div);
        div.setOnClickListener(this);
        div.setText("/");
        igual = (Button)this.findViewById(R.id.igual);
        igual.setOnClickListener(this);
        igual.setText("=");

        num1 = (EditText)this.findViewById(R.id.num1);
        num1.setOnClickListener(this);
        num2 = (EditText)this.findViewById(R.id.num2);
        num2.setOnClickListener(this);

        letrero1 = (TextView)this.findViewById(R.id.letrero1);
        letrero1.setText("Número 1");
        letrero2 = (TextView)this.findViewById(R.id.letrero2);
        letrero2.setText("Número 2");
        resultado = (TextView)this.findViewById(R.id.resultado);
        resultado.setText("");
    }

    public void onClick(View view){
        switch (view.getId()){
            case R.id.mas:
                operacion = 1;
                break;
            case R.id.menos:
                operacion = 2;
                break;
            case R.id.por:
                operacion = 3;
                break;
            case R.id.div:
                operacion = 4;
                break;
            case R.id.num1:
                sinput1 = num1.getText().toString();
                input1 = Integer.parseInt(sinput1);
                break;
            case R.id.num2:
                sinput2 = num2.getText().toString();
                input2 = Integer.parseInt(sinput2);
                break;
            case R.id.resultado:
                switch (operacion){
                    case 1:
                        resultado.setText(input1 + input2);
                        break;
                    case 2:
                        resultado.setText(input1 - input2);
                        break;
                    case 3:
                        resultado.setText(input1 * input2);
                        break;
                    case 4:
                        resultado.setText(input1 / input2);
                        break;
                    default:
                        resultado.setText("Elige una operación");
                        break;
                }
                break;
        }
    }
}

这里。

    03-15 09:41:24.234 22041-22041/? D/dalvikvm: Late-enabling CheckJNI
03-15 09:41:24.334 22041-22041/com.example.caye.colores D/HyLog: I : /data/font/config/dfactpre.dat, No such file or directory (2)
03-15 09:41:24.338 22041-22041/com.example.caye.colores D/asset: AssetManager-->addDefaultAssets CIP path not exsit!
03-15 09:41:24.502 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
03-15 09:41:24.502 22041-22041/com.example.caye.colores I/dalvikvm: Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.view.WindowCallbackWrapper.onSearchRequested
03-15 09:41:24.502 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to resolve interface method 15038: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
03-15 09:41:24.502 22041-22041/com.example.caye.colores D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
03-15 09:41:24.503 22041-22041/com.example.caye.colores I/dalvikvm: Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode
03-15 09:41:24.503 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to resolve interface method 15042: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
03-15 09:41:24.503 22041-22041/com.example.caye.colores D/dalvikvm: VFY: replacing opcode 0x72 at 0x0002
03-15 09:41:24.580 22041-22041/com.example.caye.colores I/dalvikvm: Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.widget.TintTypedArray.getChangingConfigurations
03-15 09:41:24.580 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to resolve virtual method 396: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
03-15 09:41:24.580 22041-22041/com.example.caye.colores D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
03-15 09:41:24.581 22041-22041/com.example.caye.colores I/dalvikvm: Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.widget.TintTypedArray.getType
03-15 09:41:24.581 22041-22041/com.example.caye.colores W/dalvikvm: VFY: unable to resolve virtual method 418: Landroid/content/res/TypedArray;.getType (I)I
03-15 09:41:24.581 22041-22041/com.example.caye.colores D/dalvikvm: VFY: replacing opcode 0x6e at 0x0002
03-15 09:41:24.690 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.690 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.838 22041-22041/com.example.caye.colores D/GraphicBuffer: create handle(0x619ca788) (w:544, h:960, f:1)
03-15 09:41:24.844 22041-22041/com.example.caye.colores D/OpenGLRenderer: Enabling debug mode 0
03-15 09:41:24.846 22041-22041/com.example.caye.colores D/GraphicBuffer: create handle(0x61bf9318) (w:1216, h:832, f:1)
03-15 09:41:24.857 22041-22041/com.example.caye.colores D/OpenGLRenderer: setViewport 540x960 <0x619ca8c0>
03-15 09:41:24.888 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.888 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.890 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.890 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.946 22041-22041/com.example.caye.colores D/cliptray_Editor:  setInputTypeforClipTray(): 0
03-15 09:41:24.960 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.960 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.960 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:24.961 22041-22041/com.example.caye.colores D/BubblePopupHelper: isShowingBubblePopup : false
03-15 09:41:25.008 22041-22041/com.example.caye.colores D/cliptray_Editor:  setInputTypeforClipTray(): 0
03-15 09:41:25.446 22041-22041/com.example.caye.colores D/GraphicBuffer: create handle(0x62130980) (w:544, h:960, f:1)
03-15 09:41:25.957 22041-22041/com.example.caye.colores D/GraphicBuffer: create handle(0x6201a318) (w:544, h:960, f:1)
03-15 09:41:28.168 22041-22041/com.example.caye.colores I/ViewRootImpl: ViewRoot's Touch Event : ACTION_DOWN
03-15 09:41:28.316 22041-22041/com.example.caye.colores I/ViewRootImpl: ViewRoot's Touch Event : ACTION_UP
03-15 09:41:28.341 22041-22041/com.example.caye.colores V/Provider/Settings: get setting for user 0 by user 0 so skipping cache
03-15 09:41:28.342 22041-22041/com.example.caye.colores V/Provider/Settings: invalidate [system]: current 32 != cached 0
03-15 09:41:28.347 22041-22041/com.example.caye.colores D/AndroidRuntime: Shutting down VM
03-15 09:41:28.347 22041-22041/com.example.caye.colores W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x4249be48)
03-15 09:41:28.355 22041-22041/com.example.caye.colores E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.example.caye.colores, PID: 22041
                                                                          java.lang.NumberFormatException: Invalid int: ""
                                                                              at java.lang.Integer.invalidInt(Integer.java:137)
                                                                              at java.lang.Integer.parseInt(Integer.java:358)
                                                                              at java.lang.Integer.parseInt(Integer.java:331)
                                                                              at com.example.caye.colores.MainActivity.onClick(MainActivity.java:81)
                                                                              at android.view.View.performClick(View.java:4461)
                                                                              at android.view.View$PerformClick.run(View.java:18523)
                                                                              at android.os.Handler.handleCallback(Handler.java:733)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:136)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5118)
                                                                              at java.lang.reflect.Method.invokeNative(Native Method)
                                                                              at java.lang.reflect.Method.invoke(Method.java:515)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
                                                                              at dalvik.system.NativeStart.main(Native Method)
03-15 09:41:30.416 22041-22041/com.example.caye.colores I/Process: Sending signal. PID: 22041 SIG: 9

共有3个答案

浦思源
2023-03-14

我们不需要为EditTexts使用setOnClickListener尝试此代码

package com.example.caye.colores;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

Button mas;
Button menos;
Button por;
Button div;
Button igual;

EditText num1;
EditText num2;

TextView letrero1;
TextView letrero2;
TextView resultado;

int input1;
int input2;
String sinput1;
String sinput2;
int operacion;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mas = (Button)this.findViewById(R.id.mas);
    mas.setOnClickListener(this);
    mas.setText("+");
    menos = (Button)this.findViewById(R.id.menos);
    menos.setOnClickListener(this);
    menos.setText("-");
    por = (Button)this.findViewById(R.id.por);
    por.setOnClickListener(this);
    por.setText("*");
    div = (Button)this.findViewById(R.id.div);
    div.setOnClickListener(this);
    div.setText("/");
    igual = (Button)this.findViewById(R.id.igual);
    igual.setOnClickListener(this);
    igual.setText("=");

    num1 = (EditText)this.findViewById(R.id.num1);
    //num1.setOnClickListener(this);
    num2 = (EditText)this.findViewById(R.id.num2);
    //num2.setOnClickListener(this);

    letrero1 = (TextView)this.findViewById(R.id.letrero1);
    letrero1.setText("Número 1");
    letrero2 = (TextView)this.findViewById(R.id.letrero2);
    letrero2.setText("Número 2");
    resultado = (TextView)this.findViewById(R.id.resultado);
    resultado.setText("");
}

public void onClick(View view){
    switch (view.getId()){
        case R.id.mas:
            operacion = 1;
            break;
        case R.id.menos:
            operacion = 2;
            break;
        case R.id.por:
            operacion = 3;
            break;
        case R.id.div:
            operacion = 4;
            break;

/*
        case R.id.num1:
            sinput1 = num1.getText().toString();
            input1 = Integer.parseInt(sinput1);
            break;
        case R.id.num2:
            sinput2 = num2.getText().toString();
            input2 = Integer.parseInt(sinput2);
            break;
*/
        case R.id.resultado:


          sinput1 = num1.getText().toString();
          sinput2 = num2.getText().toString();

          if(!TextUtils.isEmpty(sinput1) && TextUtils.isDigitsOnly(sinput1)                                 
          {
          input1 = Integer.parseInt(sinput1);

          }



          if(!TextUtils.isEmpty(sinput2) && TextUtils.isDigitsOnly(sinput2)                                 
          {
          input2 = Integer.parseInt(sinput2);

          }



          if(input1 != null && input2 != null) {

          switch (operacion){
                case 1:
                    resultado.setText(input1 + input2);
                    break;
                case 2:
                    resultado.setText(input1 - input2);
                    break;
                case 3:
                    resultado.setText(input1 * input2);
                    break;
                case 4:
                    resultado.setText(input1 / input2);
                    break;
                default:
                    resultado.setText("Elige una operación");
                    break;
                } else {

                   resultado.setText("Check the inputs");

                }

            }
            break;
    }
}
}
许亦
2023-03-14

我认为在您选择编辑文本num1/num2时,编辑文本内容为空。最好的方法是在点击按钮时解析编辑文本输入。还要使用isDigitsOnly() API检查输入是否为数字。

韦思淼
2023-03-14

首先,您需要提供崩溃的堆栈跟踪。

其次,你的错误极有可能是来自于你的< code > integer . parse int(sinput 1);字符串到整数的转换。

你确定那里有整数吗?您可能正在尝试将“”转换为整数。

检查 EditText 是否为空,以及它是否包含数字。

if(!TextUtils.isEmpty(sinput1) && TextUtils.isDigitsOnly(sinput1)) {
    input1 = Integer.parseInt(sinput1);
}
 类似资料:
  • 我有一个很短的倒计时(最少3秒,最多10秒),用来控制屏幕上显示新的数学问题。每隔1秒,倒计时应该检查用户是否在编辑文本中输入了正确答案。以下是我的代码: 我遇到的问题是,这个倒计时程序一创建,应用程序就会崩溃。出于某种原因,似乎使应用程序崩溃,我认为这是因为倒计时无法在1秒内完成所有这些。我尝试将其拆分为两种方法,如下所示: 然后像这样调用onTick()中的givenAnswerToInt()

  • 我想在我的java程序中添加更多的命令,我正在用unix编写,但是在传递参数时遇到了问题。我只是在unix中输入命令之前,将文本文件作为程序参数,工作正常,但想要求输入。试着自己解决,但对java来说有点陌生 我有, 效果很好,然后试了这个,失败了 所以我犯了这些错误 CPU. java: 24:错误:不兼容的类型int计数=scanner.next线();^必需:int找到:字符串CPU. ja

  • 当我的应用程序安装在我的相对较新的运行奥利奥8.0的华为上时,我的应用程序能够顺利地启动和运行。该应用程序在运行Lollipop的Nexus模拟器上也运行良好。然而,在我的另一部运行KitKat4.4的手机上,应用程序在启动时就崩溃了。 我认为问题是在添加默认NavigationDrawerActivity时发生的。 java.lang.RuntimeException:无法启动activity

  • 问题内容: 我有一个将存储Number对象的列表。该列表将通过分析字符串列表来填充,其中每个字符串都可以表示Number的任何子类。 如何将字符串解析为通用数字,而不是特定的整数或浮点数? 问题答案: 数字不能实例化,因为它是抽象类。我建议传入数字,但是如果您设置为字符串,则可以使用任何子类来解析它们, 要么 @请参阅NumberFormat

  • 问题内容: 因此,在Java中,您知道如何声明这样的整数: 我认为您应该能够逆转这一过程。我有这个代码: 其中primary是自定义Color类的对象。它的构造函数使用Integer表示不透明度(0-99)和十六进制String(例如)。 这是方法: 当我调用此方法时,它给出了以下信息: 我不明白发生了什么事。有人可以解释一下吗? 问题答案: 请问有帮助吗? 表示您应该将字符串解释为基于16的(十

  • 我正试图在Android Studio中制作一个可以“记住”我的成绩和科目的应用程序。目前,我正在开发一个允许我制作主题的系统。 编译后,没有错误,我打开应用程序,应用程序崩溃,我收到一个错误:“尝试在空对象引用上调用虚拟方法” 我认为字符串数组与此有关。 这是我的代码: 提前谢谢!