Android 如何从TextView中提取字符串并转换为double而不会导致应用程序崩溃?
我现在正在开发一个计算器应用程序,我正在尝试从两个不同的文本视图中获取两个字符串值,并将它们转换为双精度值,以便对它们进行操作。问题是,当我试图将字符串转换为双精度时,它不起作用,并且会使应用程序崩溃。我在try-catch块中尝试了它,每次都有NumberFormatException。以下是工作不正常的线路:Android 如何从TextView中提取字符串并转换为double而不会导致应用程序崩溃?,android,Android,我现在正在开发一个计算器应用程序,我正在尝试从两个不同的文本视图中获取两个字符串值,并将它们转换为双精度值,以便对它们进行操作。问题是,当我试图将字符串转换为双精度时,它不起作用,并且会使应用程序崩溃。我在try-catch块中尝试了它,每次都有NumberFormatException。以下是工作不正常的线路: double doubleContents1 = Double.parseDouble(stringContents1); // convert first value fro
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中的类型。你可以在里面输入一些东西,这样对你来说就容易多了。请注意,我可能不对,我不是发布此答案的人,因此我可能是错的