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  
Viejo 06/02/15, 19:08:55
Avatar de AlexMnrs
AlexMnrs AlexMnrs no está en línea
Usuario muy activo
Mensajes: 868
Compra y venta: (1)
 
Fecha de registro: jul 2010
Localización: Barcelona
Mensajes: 868
Modelo de smartphone: Xiaomi Mi 9
Tu operador: Movistar
Mencionado: 6 comentarios
Tagged: 0 hilos
Comprobar si está vacío EditText de tipo número

Hola!!

Estoy aprendiendo a programar en Android desde el principio y para ello estoy creando un mini-juego de adivinar un número que se genera aleatoriamente del 1 al 10.

Toda la parte de adivinar el número y demás es funcional, eso lo tengo todo OK, el problema está cuando le das al botón Adivinar sin haber ingresado nada en el EditText, la aplicación crashea, se detiene.

Quiero crear la condición que si el EditText está vacío, ambos botones, el de Adivinar y el de Reiniciar, aparezcan deshabilitados, de esa manera nadie puede pulsarlos y la aplicación no crashearía. Por el contrario, si se detecta que el usuario ha ingresado un número, que se habilite el botón de Adivinar.

He buscado y rebuscado en Google, y hay muchísima información, pero toda de distintas maneras y ninguna me ha funcionado

Os muestro el código:

Código:
public class PrincipalActivity extends Activity {


    // Declaramos variables
    private TextView info, numIntentos;
    private EditText numero;
    private Button adivinar, reiniciar;
    private int aleatorio;
    private int intentos = 3;
      @override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);

        // Enlazamos las variables
        numIntentos = (TextView) findViewById(R.id.txtIntentos);
        info = (TextView) findViewById(R.id.txtInfo);
        numero = (EditText) findViewById(R.id.edtNumero);
        adivinar = (Button) findViewById(R.id.btnAdivinar);
        reiniciar = (Button) findViewById(R.id.btnReiniciar);
        aleatorio = generarAleatorio();

        reiniciar.setEnabled(false);

        // IMAGINO QUE AQUÍ IRÍA LA CONDICIÓN DE LA QUE HABLO

        //Programamos el clic del botón Adivinar
        adivinar.setOnClickListener(new View.OnClickListener() {
              @override
            public void onClick(View v) {
                // Guardamos el número que ha ingresado el usuario
                int numeroIngresado;
                numeroIngresado = Integer.parseInt(numero.getText().toString());

                // Si el numeroIngresado es igual al aleatorio, gana, si no, resta un intento
                if (aleatorio==numeroIngresado) {
                    info.setText("Enhorabuena, ¡lo has adivinado!");
                    adivinar.setEnabled(false);
                    reiniciar.setEnabled(true);
                } else {
                    info.setText("¡Vuelve a intentarlo!");
                    intentos = intentos-1;
                    numero.setText("");
                }

                // Si el numeroIngresado es mayor a 10, avisar
                if (numeroIngresado>10){
                    info.setText("Ingresa un número del 1 al 10");
                    numero.setText("");
                    intentos = 3;
                }

                // Si gastas el max. de intentos, pierdes
                if (intentos == 0) {
                    info.setText("¡Has perdido! ¡Vuelve a jugar!");
                    adivinar.setEnabled(false);
                    reiniciar.setEnabled(true);
                }
            }
        });

        //Programamos el clic del botón Reiniciar
        reiniciar.setOnClickListener(new View.OnClickListener() {
              @override
            public void onClick(View v) {
                intentos = 3;
                adivinar.setEnabled(true);
                reiniciar.setEnabled(false);
                info.setText("");
                aleatorio = generarAleatorio();
                numero.setText("");
            }
        });

    }

    // Función para generar números aleatorios del 0 al 10
    private int generarAleatorio(){
        return (int)(Math.random()*10+1);
    }
El EditText es de tipo number:

Código:
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/edtNumero"
        android:layout_gravity="center_horizontal" />
Gracias!!

Última edición por AlexMnrs Día 06/02/15 a las 20:51:44
Responder Con Cita


  #2  
Viejo 06/02/15, 20:51:34
Avatar de AlexMnrs
AlexMnrs AlexMnrs no está en línea
Usuario muy activo
Mensajes: 868
Compra y venta: (1)
 
Fecha de registro: jul 2010
Localización: Barcelona
Mensajes: 868
Modelo de smartphone: Xiaomi Mi 9
Tu operador: Movistar
Mencionado: 6 comentarios
Tagged: 0 hilos
Bueno, os cuento por si alguien tiene la misma duda. Lo he solucionado de la siguiente forma:

Esta línea:

Código:
numeroIngresado = Integer.parseInt(numero.getText().toString());
La he dejado así:

Código:
numeroIngresado = numero.getText().toString()!=null && !numero.getText().toString().equals("") ? Integer.parseInt(numero.getText().toString()) : -1;
Y el if sería este:

Código:
// Si el numeroIngresado es mayor menos a 0 o mayor a 10, dar un toque
                if (numeroIngresado < 0 || numeroIngresado > 10){
                    Toast.makeText(getApplicationContext(), "Ingresa un número del 1 al 10!", Toast.LENGTH_SHORT).show();
                    intentos = 3;
                }
Un saludo!
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 12:23:48 (GMT +2)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007