Android 如何从TextView中提取字符串并转换为double而不会导致应用程序崩溃?

Android 如何从TextView中提取字符串并转换为double而不会导致应用程序崩溃?,android,Android,我现在正在开发一个计算器应用程序,我正在尝试从两个不同的文本视图中获取两个字符串值,并将它们转换为双精度值,以便对它们进行操作。问题是,当我试图将字符串转换为双精度时,它不起作用,并且会使应用程序崩溃。我在try-catch块中尝试了它,每次都有NumberFormatException。以下是工作不正常的线路: double doubleContents1 = Double.parseDouble(stringContents1); // convert first value fro

我现在正在开发一个计算器应用程序,我正在尝试从两个不同的文本视图中获取两个字符串值,并将它们转换为双精度值,以便对它们进行操作。问题是,当我试图将字符串转换为双精度时,它不起作用,并且会使应用程序崩溃。我在try-catch块中尝试了它,每次都有NumberFormatException。以下是工作不正常的线路:

    double doubleContents1 = Double.parseDouble(stringContents1);
// convert first value from string to double
    double doubleContents2 = Double.parseDouble(stringContents2);
// convert second value from string to double
以下是完整的代码:

public void sendMessageEquals(View view) {
        TextView textView2 = (TextView) findViewById(R.id.textView2);
    // this is the first textview, for the first number
        TextView textView3 = (TextView) findViewById(R.id.textView3);
    // second textview for the second number
        TextView textView4 = (TextView) findViewById(R.id.textView4);
    // third textview for displaying the result from the first two
        String stringContents1 = (String) textView2.getText();
    // get the value from the first textview
        String stringContents2 = (String) textView3.getText();
    // get the value from the second textview
        double doubleContents1 = Double.parseDouble(stringContents1);
    // convert first value from string to double
        double doubleContents2 = Double.parseDouble(stringContents2);
    // convert second value from string to double

        if (operator.equals("+")) {
            Double doubleContents3 = doubleContents1 + doubleContents2;
            String stringContents3 = Double.toString(doubleContents3);
            textView4.setText(stringContents3);
            state = "Phase1";
        }
        else if (operator.equals("-")) {
            Double doubleContents3 = doubleContents1 - doubleContents2;
            String stringContents3 = Double.toString(doubleContents3);
        }
        else if (operator.equals("*")) {
            Double doubleContents3 = doubleContents1 * doubleContents2;
            String stringContents3 = Double.toString(doubleContents3);
        }
        else if (operator.equals("/")) {
            if (doubleContents2 != 0) {
                Double doubleContents3 = doubleContents1 / doubleContents2;
                String stringContents3 = Double.toString(doubleContents3);
            }

        }
        else {
            state = "Phase1";
        }

    }
日志:

04-23 00:28:50.804 20868-20868/com.example.kellen.homework2tester D/AndroidRuntime: Shutting down VM
04-23 00:28:50.805 20868-20868/com.example.kellen.homework2tester E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.kellen.homework2tester, PID: 20868
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
        at android.view.View.performClick(View.java:5610)
        at android.view.View$PerformClick.run(View.java:22265)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)
        at android.view.View.performClick(View.java:5610) 
        at android.view.View$PerformClick.run(View.java:22265) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
     Caused by: java.lang.NumberFormatException: For input string: "operand 1: 1"
        at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
        at java.lang.Double.parseDouble(Double.java:547)
        at com.example.kellen.homework2tester.MainActivity.sendMessageEquals(MainActivity.java:184)
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 
        at android.view.View.performClick(View.java:5610) 
        at android.view.View$PerformClick.run(View.java:22265) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 

我的应用程序中有一个类似的例子。这就是对我有效的原因:

 double doubleContents1 = Double.parseDouble(textView2.getText().toString());

 double doubleContents2 = Double.parseDouble(textView2.getText().toString());

如果这有帮助,请通过编辑您的问题发布日志,以便我们可以查看此错误。我的应用程序中有一个类似的示例。这就是对我有效的原因:

 double doubleContents1 = Double.parseDouble(textView2.getText().toString());

 double doubleContents2 = Double.parseDouble(textView2.getText().toString());

如果这有帮助,请通过编辑您的问题发布日志猫,以便我们可以查看此错误

日志猫异常说明您的字符串是“操作数1:”,因此无法将其解析为
双精度


您应该从
编辑文本
中获取值,而不是从
文本视图
中获取值。logcat异常表示您的字符串是“操作数1:”,因此无法将其解析为
双精度


您应该从
EditText
中获取值,而不是从
TextView

发布日志捕获该异常,并查看您何时尝试解析无效的双精度类型?可能它是一个空字符串,可能包含逗号而不是点…发布您的LogcatCatCatch异常,查看您何时尝试解析无效的双精度类型?可能它是一个空字符串,可能包含逗号而不是点…我尝试了它,但它不起作用,我继续从logcat发布错误。我尝试了它,但它不起作用,我继续从logcat发布错误。是的,你的权利。在我使用的示例中(在我的应用程序中),EditTextOkay对我来说很有用。我是否需要将我的文本视图完全更改为EditText?这应该很简单。更改XML和java中的类型。你可以在里面输入一些东西,这样对你来说就容易多了。请注意,我可能不对,我不是发布此答案的人,因此我可能是错的。是的,你是对的。在我使用的示例中(在我的应用程序中),EditTextOkay对我来说很有用。我是否需要将我的文本视图完全更改为EditText?这应该很简单。更改XML和java中的类型。你可以在里面输入一些东西,这样对你来说就容易多了。请注意,我可能不对,我不是发布此答案的人,因此我可能是错的