【问题标题】:Android, Invalid double: "" blank field crashes the program [duplicate]Android,无效的双:“”空白字段使程序崩溃[重复]
【发布时间】:2016-12-23 20:34:37
【问题描述】:

在用户输入后,我正在尝试使用按钮进行计算。当我不填写字段并按下按钮时,我的程序崩溃了,但我只想敬酒..我已经阅读了很多其他类似的问题,但我不明白我必须做些什么来解决在我的代码中.. 有没有人可以帮助我??谢谢。。

activity_main.xml:

<EditText
    android:layout_width="130dp"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/editText1"/>

<EditText
    android:layout_width="130dp"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/editText2"/>

<EditText
    android:layout_width="130dp"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal"
    android:ems="10"
    android:id="@+id/editText3"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""
    android:id="@+id/textView1"/>

<Button
    android:layout_width="65dp"
    android:layout_height="wrap_content"
    android:id="@+id/calculateButton
    android:background="@android:drawable/ic_menu_edit" />

MainActivity.java:

......
mEditText1 = (EditText)findViewById(R.id.editText1);
mEditText2 = (EditText)findViewById(R.id.editText2);
mEditText3 = (EditText)findViewById(R.id.editText3);
mTextView = (TextView)findViewById(R.id.textView1);
cButton =  (Button)findViewById(R.id.calculateButton);
    cButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //When the button is clicked, call the calucate method.
            calculate();
        }
    });

......

public void calculate(){

    Double value1 = Double.parseDouble(mEditText1.getText().toString());
    Double value2 = Double.parseDouble(mEditText2.getText().toString());
    Double value3 = Double.parseDouble(mEditText3.getText().toString());
    if((value1!=0)&&(value2!=0)) {

        if ((value1 != null) && (value2 != null) && (value3 != null)) {
            calculatedValue = (value2 * value3) / value1;
            mTextView.setText(calculatedValue.toString());}
    else {
            Toast.makeText(getApplicationContext(), "Please fill them all", Toast.LENGTH_LONG).show();
          }
 }

我得到的错误是:

12-22 20:09:26.694 18523-18523/com.example.nigi.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.NumberFormatException: Invalid double: ""
    at java.lang.StringToReal.invalidReal(StringToReal.java:63)
    at java.lang.StringToReal.parseDouble(StringToReal.java:248)
    at java.lang.Double.parseDouble(Double.java:295)
    at android.view.View.performClick(View.java:4442)
    at android.view.View$PerformClick.run(View.java:18473)
    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:5105)

谢谢!!

【问题讨论】:

  • 实现 try...catch.. 崩溃的地方
  • 想知道为什么"" 不能被视为有效号码?因为 Java 不会将 "" 转换为 0
  • 双值1 = Double.parseDouble(String.valueOf(mEditText1.getText()));双值2 = Double.parseDouble(String.valueOf(mEditText2.getText()));双值3 = Double.parseDouble(String.valueOf(mEditText3.getText()));而不是解决您的代码崩溃

标签: java android numberformatexception


【解决方案1】:

使用此代码:

    public void calculate()
{        
        if(String.valueOf(mEditText1.getText()).length() == 0)    
        mEditText1.setError("Required only alphabets");    
        else if(String.valueOf(mEditText2.getText()).length() == 0)    
        mEditText2.setError("Required only alphabets");    
        else if(String.valueOf(mEditText3.getText()).length() == 0)
            mEditText3.setError("Required only alphabets");    
        else{
        Double value1 = Double.parseDouble(String.valueOf(mEditText1.getText()));
        Double value2 = Double.parseDouble(String.valueOf(mEditText2.getText()));
        Double value3 =    Double.parseDouble(String.valueOf(mEditText3.getText()));
        calculatedValue = (value2 * value3) / value1;
        mTextView.setText(calculatedValue.toString());
       }
 }  

【讨论】:

  • 你知道这会导致完全相同的异常吗?解析双打是这里的问题。您必须在解析之前检查输入
  • 你是对的,@0xDEADC0DE,感谢告知
  • 它工作得很好!!非常感谢!!! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多