LogCat:
02-16 21:33:30.235: E/AndroidRuntime(28464): FATAL EXCEPTION: main
02-16 21:33:30.235: E/AndroidRuntime(28464): java.lang.NumberFormatException: Invalid double: ""
02-16 21:33:30.235: E/AndroidRuntime(28464): at java.lang.StringToReal.invalidReal(StringToReal.java:63)
02-16 21:33:30.235: E/AndroidRuntime(28464): at java.lang.StringToReal.parseDouble(StringToReal.java:248)
02-16 21:33:30.235: E/AndroidRuntime(28464): at java.lang.Double.parseDouble(Double.java:295)
02-16 21:33:30.235: E/AndroidRuntime(28464): at lmf.test8.MainActivity.onClick(MainActivity.java:35)
02-16 21:33:30.235: E/AndroidRuntime(28464): at android.view.View.performClick(View.java:4212)
02-16 21:33:30.235: E/AndroidRuntime(28464): at android.view.View$PerformClick.run(View.java:17476)
XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text_display"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button_compute"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/button_compute" />
<EditText
android:id="@+id/edit_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal" />
</LinearLayout>
MainActivity :
public class MainActivity extends Activity implements OnClickListener {
TextView text_display;
EditText input;
Button compute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text_display = (TextView) findViewById(R.id.text_display);
input = (EditText) findViewById(R.id.edit_input);
compute = (Button) findViewById(R.id.button_compute);
compute.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
String get_input = input.getText().toString();
if (!get_input.equals("") || !get_input.equals(".")) {
Double double_input = Double.parseDouble(get_input);
if (double_input > 5) {
text_display.setText("greater than 5");
}
else {
text_display.setText("less than 5");
}
}
else {
text_display.setText("");
}
}
}
每当我将edittext留空或输入小数时,我的应用程序崩溃了。但是当我删除if语句中的|| !get_input.equals(".")
时,即使我将edittext留空,我也没有收到错误。但是当我输入一个小数时,我收到一个错误。如何解决这个问题?
答案 0 :(得分:2)
if (!get_input.equals("") && !get_input.equals(".")) {
更改逻辑以使用&amp;&amp ;.使用||,当其中一个条件为真时,您仍然会进入if语句,然后尝试从空格或句点中解析一个double,这会给出数字格式异常。
您希望在尝试解析输入之前确保输入不等于空 AND 不等于句号。