Android, Invalid double: пустое поле приводит к сбою программы

Я пытаюсь сделать расчет с помощью кнопки после ввода пользователя. Когда я не заполняю поля и нажимаю кнопку, моя программа вылетает, но я просто хочу поднять сообщение.. Я прочитал много других подобных проблем, но я не понимаю, что я должен сделать, чтобы исправить в моем коде .. Есть ли кто-нибудь, кто может мне помочь ?? Спасибо..

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)

Спасибо!!


person ni gi    schedule 23.12.2016    source источник
comment
Реализовать попытку... поймать... где происходит сбой   -  person Mayur Raval    schedule 23.12.2016
comment
Интересно, почему "" нельзя считать допустимым числом? потому что Java не преобразует "" в 0.   -  person Phantômaxx    schedule 23.12.2016
comment
Двойное значение1 = Double.parseDouble(String.valueOf(mEditText1.getText())); Двойное значение2 = Double.parseDouble(String.valueOf(mEditText2.getText())); Двойное значение3 = Double.parseDouble(String.valueOf(mEditText3.getText())); вместо вашего кода решается сбой   -  person Zala Janaksinh    schedule 23.12.2016


Ответы (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());
       }
 }  
person Ram Koti    schedule 23.12.2016
comment
Вы знаете, что это вызовет точно такое же исключение? Здесь проблема с разбором двойников. Вы должны проверить ввод, прежде чем он будет проанализирован - person 0xDEADC0DE; 23.12.2016
comment
Да, вы правы, @0xDEADC0DE, СПАСИБО ЗА ИНФОРМИРОВАНИЕ - person Ram Koti; 23.12.2016
comment
Работает просто отлично!! Большое спасибо!!! :) - person ni gi; 24.12.2016