ошибка калькулятора при клике без значения - PullRequest
0 голосов
/ 29 апреля 2018

Мне нужна помощь, я создаю приложение калькулятора, но когда я нажимаю кнопку «Добавить», «Суб» или «Равно» без значения, приложение вылетает. В противном случае, если я вставлю значение первым, оно будет работать без ошибок. помощь

Кнопка для равных

FloatingActionButton fab = findViewById(R.id.fab);
fab.bringToFront();
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Value2 = Float.parseFloat(ed1.getText() + "" );
        if (mAddition == true){
            ed1.setText(Value1 + Value2 +"");
            mAddition=false;
        }
        if (mSubtract == true){
            ed1.setText(Value1 - Value2 +"");
            mSubtract=false;
        }
    }
}); 

Кнопка для Sub

FloatingActionButton btn_Sub = findViewById(R.id.btn_Sub);
btn_Sub.bringToFront();
btn_Sub.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Value1 = Float.parseFloat(ed1.getText() + "");
        mSubtract = true ;
        ed1.setText("");
    }
});

Кнопка добавления

FloatingActionButton btn_Add = findViewById(R.id.btn_Add);
btn_Add.bringToFront();
btn_Add.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (ed1 == null){
            ed1.setText("");
        }else {
            Value1 = Float.parseFloat(ed1.getText() + "");
            mAddition = true;
            ed1.setText("");
        }
    }
});

что мне делать?

Это мой logcat

 04-29 22:27:18.861 10722-10722/afif.calfits V/FA: onActivityCreated
04-29 22:27:18.891 10722-10722/afif.calfits D/skia_ext: turboImageDecoder took 27.87ms to decode 1024x768 (1x downscale)
04-29 22:27:19.151 10722-10744/afif.calfits V/FA: Activity resumed, time: 5774739
04-29 22:27:19.151 10722-10744/afif.calfits D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=Food, firebase_previous_id(_pi)=-2803431669891477858, firebase_screen_class(_sc)=Dairy, firebase_screen_id(_si)=-8225789602144573450}]
04-29 22:27:20.261 10722-10722/afif.calfits D/AndroidRuntime: Shutting down VM
04-29 22:27:20.261 10722-10722/afif.calfits E/AndroidRuntime: FATAL EXCEPTION: main
                                                              Process: afif.calfits, PID: 10722
                                                              java.lang.NumberFormatException: Invalid float: ""
                                                                  at java.lang.StringToReal.invalidReal(StringToReal.java:63)
                                                                  at java.lang.StringToReal.parseFloat(StringToReal.java:308)
                                                                  at java.lang.Float.parseFloat(Float.java:306)
                                                                  at afif.calfits.Dairy$4.onClick(Dairy.java:95)
                                                                  at android.view.View.performClick(View.java:4756)
                                                                  at android.view.View$PerformClick.run(View.java:19761)
                                                                  at android.os.Handler.handleCallback(Handler.java:739)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                  at android.os.Looper.loop(Looper.java:135)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:5253)
                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                  at java.lang.reflect.Method.invoke(Method.java:372)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Я думаю, что ваша проблема не связана с .toString (), а не NumberFormatException.

Float.parseFloat() бросков NumberFormatException − if the string does not contain a parsable float.

Так что, когда вы ничего не помещаете в текст редактирования, он получает только пустую строку. И пустая строка не является разборным числом, и вы получили NumberFormatException.

Для получения дополнительной информации нажмите здесь

Вы можете сделать следующее:

Кнопка для суб

FloatingActionButton btn_Sub = findViewById(R.id.btn_Sub);
btn_Sub.bringToFront();
btn_Sub.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            Value1 = Float.parseFloat(ed1.getText() + "");
            mSubtract = true ;
            ed1.setText("");
        } catch(NumberFormatException e) {
            Toast.makeText(YOUR_ACTIVITY_CLASS.this, "Invalid Number", Toast.LENGTH_LONG).show();
        }
    }
});
0 голосов
/ 30 апреля 2018

Это потому, что вы пытаетесь разобрать пустую строку, которая не является правильным параметром для метода Float.parseFloat(). Из следующей документации :

public static float parseFloat (String s) генерирует NumberFormatException

Возвращает новый тип с плавающей запятой, инициализированный значением, представленным указанной строкой, в соответствии с методом valueOf класса Float.

Параметры:
s - строка для анализа.
Возвращает:
значение с плавающей запятой, представленное строковым аргументом.
Выдает:
NullPointerException - если строка является нулем
NumberFormatException - если строка не содержит анализируемого числа с плавающей точкой.

Вы можете видеть, что метод будет выдавать NullPointerException, если строка равна нулю, или NumberFormatException, если строка не является плавающей точкой. Пустая строка не является плавающей точкой, поэтому вы получите NumberFormatException

Итак, вам нужно проверить пустую строку и перехватить ошибку примерно так:

String text = ed1.getText().toString();
float value;

// check if text is empty or not.
if(text.isEmpty()) {
  value = 0;
} else {
  try {
    value = Float.parseFloat(text);    
  } catch(NumberFormatException e) {
    // text is not a number, set it as 0.
    value = 0;
  }
}
0 голосов
/ 29 апреля 2018

Вы не добавляете журнал или ошибку, поэтому я не могу точно определить вашу ошибку или проблему, но после показа вашего кода, я думаю, проблема в этой строке: -

здесь, вам нужно добавить .toString () с помощью editext.gettext ().

In, Кнопка для Равен заменяет эту строку

Value2 = Float.parseFloat(ed1.getText() + "" );

с

 if( !ed1.getText().toString().equals("")){

            Value2 = Float.parseFloat(ed1.getText().toString() + "" );
    }

То же, что и в кнопке для Sub

FloatingActionButton btn_Sub = findViewById(R.id.btn_Sub);
btn_Sub.bringToFront();
btn_Sub.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

 if( !ed1.getText().toString().equals("")){

        Value1 = Float.parseFloat(ed1.getText().toString() + "");
        mSubtract = true ;
        ed1.setText("");
    }
 }
});

То же, что и в кнопке добавления

FloatingActionButton btn_Add = findViewById(R.id.btn_Add);
btn_Add.bringToFront();
btn_Add.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (ed1 == null){
            ed1.setText("");
        }else {
          if( !ed1.getText().toString().equals("")){   
            Value1 = Float.parseFloat(ed1.getText().toString() + "");
            mAddition = true;
            ed1.setText("");

           }
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...