Duvida sobre clicar em calcular e o app fechar

Depois de um tempo, aprendendo sobre o AndroidStudio, tenho uma duvida, criei uma calculadora que precisa receber valores e fazer o calculo, só que eu queria saber se existe algum codigo que quando eu não digitar nenhum numero e simplismente clicar em calcular, o app não feche.
Tipo o meu aplicativo, esta funcionando bem, só que eu queria corrigir esse erro!

Mostre o código do botão calcular, se possível.

Se nenhum número foi informado e o app fecha ao clicar em calcular, aparentemente está sendo causada uma exceção (exception). Antes de calcular, você precisa verificar se algum valor foi digitado, e não pode calcular se nenhum valor foi digitado.

Abraço.

Na verdade eu usei esse botão na função onClick e só selecionei o codigo que ela iria ativar.

public void equação(View v){

int b = Integer.parseInt(val1.getText().toString());
int h = Integer.parseInt(val2.getText().toString());
int res1;

res1=(b*h)/2;

res.setText(“A = (”+b+" * “+h+”) / 2\n " +"A= "+res1);

}

}

executa seu projeto e depois clica em run, vai estar la no canto inferior esquerdo. dps mostra o erro aqui no forum.

Como eu disse, antes de converter os valores pra inteiro, você precisa verificar se há algum texto nos TextViews (val1 e val2). Se não houver, você não pode fazer parseInt, ou vai ocorrer uma exceção e o app vai fechar. Algo como:

String v1 = val1.getText().toString().trim();
String v2 = val2.getText().toString().trim();

if (v1.equals("") || v2.equals("")){
 // valores estão vazios, aqui você pode emitir um aviso pro usuário
}else{
  float b = Float.parseFloat(v1);
  float h = Float.parseFloat(v2);
  float res1 =  (b * h) / 2;
  res.setText(“A = (”+b+" * “+h+”) / 2\n " +"A= " + res1);
}

Obs: se você vai fazer divisões, provavelmente precisa de float em vez de int. Por isso mudei os tipos para float.

Abraço.

valeu amigo, você me lembrou que eu podia ter feito um laço if e fazer uma condição onde se eu não digitar nada , ele emite uma mensangem pedindo para que o usuario escreva algum número no espaço. Valeu msm :smiley:

Eu vi que, mudando de int pra float, os resultados inteiros sempre tem .0 depois do resultado (ex.: Resultado = 10.0) . Você saberia como eu posso tirar esse 0 dos valores inteiros?

Você pode manter os inteiros ou usar DecimalFormat para formatar o valor antes de exibir. Algo como:

//...
float res1 =  (b * h) / 2;
DecimalFormat df = new DecimalFormat("#");
res.setText(“A = (”+df.format(b)+" * “+df.format(h)+”) / 2\n " +"A= " + df.format(res1));
//...

Abraço.