|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
|
Herramientas |
#1
|
||||
|
||||
Duda en App
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 Gracias |
|
#2
|
||||
|
||||
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; } |
#3
|
||||
|
||||
Para la segunda opcion podrias preguntar lo mismo
if (editText.getText().toString().trim().equals("")) y si es vacio hacer un boton.setEnable(false); |
#5
|
||||
|
||||
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)
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#6
|
||||
|
||||
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 } |
#7
|
||||
|
||||
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.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#8
|
||||
|
||||
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.
Código:
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 } } });
__________________
|
#9
|
||||
|
||||
En realidad el parseDouble 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: Código:
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 }
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#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; |
#13
|
||||
|
||||
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 |
#14
|
||||
|
||||
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...
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#15
|
||||
|
||||
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 |
#16
|
||||
|
||||
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.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
Gracias de parte de: | ||