Ver la Versión Completa : Duda en App
feelmusic
10/04/13, 19:47:08
Buenas, estoy haciendo una aplicación sencilla tipo calculadora y lo que quiero es que al pulsar uno de los botones y el EditText este en blanco salga una notificacion, y asi evitar el error que sale y que cierra la apliacion.
Porque lo que quiero es evitar que se pulse el boton si no hay ningun numero escrito, que tambien podria ser una opcion, bloquear los botones si no hay nada escrito en el EditText. Y tampoco se como hacerlo :D
Gracias
kriogeN
10/04/13, 20:20:24
No entiendo muy bien el problema, pero para la primera opción en el onClick del botón, y suponiendo que el EditText lo tienes almacenado en una variable que se llama editText
if (editText.getText().toString().trim().equals(""))
{
//Mostrar un Toast (Busca la Info)
return;
}
pablogarcia013
11/04/13, 09:16:36
Para la segunda opcion podrias preguntar lo mismo
if (editText.getText().toString().trim().equals(""))
y si es vacio hacer un boton.setEnable(false);
feelmusic
11/04/13, 10:07:48
Gracias a los dos, pero he probado ambas formas pero se sigue cerrando la aplicacion cuando el EditText esta vacio y pulso el boton :)
mocelet
11/04/13, 13:29:32
Mira las trazas a ver dónde te da el NullPointerException o el error que sea, probablemente la variable editText la tengas mal inicializada o se te haya olvidado hacer el findViewById (cosa que me pasa constantemente)
feelmusic
11/04/13, 15:34:09
Bueno aqui teneis el codigo para ver donde esta el error, el boton al pulsarlo y estar vacio el editText quiero mostra un mensaje, si en el editText hay un numero mayor de 200 mostrar 60 en un TextView y sino (menor que 200) mostrar la operacion matematica "eb".
public class MainActivity extends Activity implements OnClickListener {
EditText editText;
Button boton;
double v1, eb;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
boton = (Button) findViewById(R.id.boton);
boton.setOnClickListener(this);
public void onClick(View v) {
// TODO Auto-generated method stub
v1 = Double.parseDouble(editText.getText().toString());
eb = v1 * 0.10;//operacion matematica
switch(v.getId()){
case R.id.boton: //Boton
if(editText.getText().toString().trim().equals("")){
Toast mensaje = Toast.makeText(this, "Introducir un número", Toast.LENGTH_SHORT);
mensaje.show();
}else if (v1 > 200){
//si v1 es mayor de 200
textView1.setText(String.valueOf("60"));
//mostrar en el textview1 60
}else{
textView1.setText(String.valueOf(eb));
//sino mostrar en el textView eb, que es una operacion matematica
}
mocelet
11/04/13, 15:38:29
Hombre... la comprobación de vacío tendrás que hacerla antes de intentar convertirlo a double...
Aunque lo ideal sería meter el parseDouble en un try/catch, y si salta el catch mostrar la tostada.
Celtium
11/04/13, 17:27:09
Presonaliza el onclick del boton, asi tendras todo un poco ordenado si llegas a tener muchos botones y haz lo que te dice mocelet, haz el calculo matematico cuando sepas que en el edittexxt hay algun valor, por que cuando no hay nada te petará. No se puede multiplicar un valor null por 0.10.
boton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (!editText.getText().toString().trim().equals("")) {
v1 = Double.parseDouble(editText.getText().toString());
eb = v1 * 0.10;//operacion matematica
if (v1 > 200){ //si v1 es mayor de 200
textView1.setText(String.valueOf("60")) //mostrar en el textview1 60
}else{
textView1.setText(String.valueOf(eb)); //sino mostrar en el textView eb, que es una operacion matematica
}
}
});Asi debia ir bien.
mocelet
11/04/13, 17:41:32
En realidad el parseDouble (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Double.html#parseDouble(java.lang.String))lanza la excepción NumberFormatException si lo que le pasas no es algo convertible a un número.
Mejor que comprobar si el string está vacío:
try{
v1 = Double.parseDouble (bla bla bla)
// todas las cuentas y cosas sabiendo que v1 es un número correcto
}catch(NumberFormatException e){
// lo del edit text no era un número, tostada o lo que sea
}
feelmusic
11/04/13, 19:06:34
Vale, gracias. Ya lo he conseguido :)
feelmusic
12/04/13, 12:45:11
El mensaje sale cuando el EditText esta en blanco, pero he observado que en los TextView en uno de ellos sale 0, en otro nada y el tecero 0.20.
He puesto un boton Reset para borrarlo todo con este codigo:
if (v1 >= 0){
etEditText.setText(String.valueOf(""));
tvNumero1.setText(String.valueOf(""));
tvNumero2.setText(String.valueOf(""));
tvNumero3.setText(String.valueOf(""));
tvNumero4.setText(String.valueOf(""));
}
Funciona perfectamente pero he probado a meter el codigo correspondiente de cada boton de borrado en el catch junto con Toast pero no funciona, ¿ hay que ponerlo en otro lugar o de otra manera?
Algo asi:
case.R.id.Boton1:
try{
v1 = Double.parseDouble(etNumero.getText().toString());
}
catch(NumberFormatException ex){
tvNumero1.setText(String.valueOf(""));
Toast mensaje = Toast.makeText(this, "Introduce un número", Toast.LENGTH_SHORT);
mensaje.show();
}
break;
feelmusic
13/04/13, 11:54:51
Ya he encontrado la solucion:-)
feelmusic
26/04/13, 13:58:55
Tengo un editText pasado a float con la variable v2,
v2 = Float.parseFloat(etEditText.getText().toString());
y quiero establecer una condicion en el que v2 sea igual a nada, es decir, que el EditText este vacio y no se como ponerlo porque si no lo hubiera pasado a float se que seria algo asi : etEditText.getText().toString().trim().equals("")
sino me equivoco como casi siempre :)
mocelet
26/04/13, 17:33:00
v2 siempre va a ser un número válido, si el edit text estuviera vacío te saltaría una excepción en el parseFloat, que o la capturas o se te cierra la app. Vamos, es lo mismo que comentábamos al principio del hilo :)
P.D: Sé que no te he contestado al MP todavía...
feelmusic
26/04/13, 17:54:22
Si, ya lo del principio lo arregle con esto:
try{
v1 = Float.parseFloat(etEditText1.getText().toString()) ;
}
catch(NumberFormatException ex){
Toast mensaje = Toast.makeText(this, "Introduce un número", Toast.LENGTH_SHORT);
mensaje.show();
}
Y despues tengo las diferentes condiciones para las operaciones matematicas, lo que pasa es que he añadido otro EditText mas (para complicarlo mas) y hacer algunas operaciones con los numeros introducidos en los EditTexts. Lo que pasa es que me hace todas las operaciones que quiero que me haga con los dos EditText, porque tengo varias condiciones de este tipo:
if(v2>0 && v1>200)....
El problema viene cuando quiero utilizar un solo editText (el v1) para hacer una serie de calculos solo con los numeros introducidos en ese editText, y habia pensado en poner eso si en v2 no ha nada escrito y en v1 es mayor de tal... hacer tales cosas, pero no se como poner el v2 igual a nada.
O se podria poner un try catch con codiciones o otro try catch para cuando v2 no ha nada y en v1 si?
PD: No te preocupes por el MP :)
mocelet
26/04/13, 19:13:55
Es que un float no puede ser nada, es un tipo primitivo y tiene un valor numérico. Necesitarás otra variable boolean que te indique si a v2 le tienes que hacer caso o no. El sitio para ponerlo es el try catch de v2, si el número se convierte bien la pones a true, si salta excepción, a false.
feelmusic
27/04/13, 10:42:34
Ya entiendo, gracias mocelet :)
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.