Problema ao tentar realizar uma conta com numeros negativos

Estou tentando fazer uma conta colocando números negativos, mas sempre que coloco o sinal “-” da o seguinte erro java.lang.NumberFormatException: For input string: “-” e meu app fecha. Quero realizar contas negativas, alguem sabe como posso resolver esse problema ?

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private ViewHolder mViewHolder = new ViewHolder();
    EditText editTextKm;
    EditText perdaTextKm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editTextKm = this.findViewById(R.id.edit_km);
        perdaTextKm = this.findViewById(R.id.perda_km);

        editTextKm.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                        String valorKm = (editTextKm.getText().toString());
                        if (valorKm.isEmpty()) {
                            perdaTextKm.setText("");
                        } else {
                            double perdaKm = Double.valueOf(valorKm) * (-0.35);
                            perdaTextKm.setText(String.format("%.2f", (perdaKm)));
                        }
                    }
        });
1 curtida

Demorou um pouco para eu entender o que realmente ocorria. O problema e muito simples quando você tenta digitar um caracter não numérico por exemplo - (menos), ao tentar fazer o valueOf simplesmente vai quebrar.
Pois está na função afterTextChanged, para resolver esse problema tera de fazer uma validação do que ele está digitando tem números, lembrando que terá de proibir de digitar letras e espaços.

Verificando se contem numeros

Caso contenha algum número em sua string, você deixará o processo seguir em frente.

2 curtidas

Show, obrigado!!