Android - Ayuda con if else

 
Vista:
sin imagen de perfil
Val: 197
Plata
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Ayuda con if else

Publicado por Luis (97 intervenciones) el 29/10/2016 23:41:52
Hola de nuevo, como dice el titulo intento implementar una condicion if pero creo que para ello he de utilizar Variable de tipo boolean pero no consigo retornar la condicion return true; o return false; correctamenta.

Todavia no domino java y por eso ando mas perdido que otra cosa pero poco a poco iremos aprendiendo a base de baches y con su ayuda.

Tengo una clase DBnombres.java que maneja la base de datos encargada de crear, actualizar, borrar, una base de datos SQLITE.
Y una Activity llamada activity_buscar donde en un editText ingreso un nombre y si existe en la DBnombres los muestra en sus textview respectivos.

Me estoy peleando con el metodo buscar ya que qiero modificarlo poniendo una condicion if.

Actualmente en la activity_buscar si inserto un nombre en un editText al presionar el button me ejecuta este metodo mostrando los nombres si existen en sus textviews y si no existen muestra un toast diciendo que no existen;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Boton_buscar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
             DBnombres db = new DBnombres(getApplicationContext(),null,null,1);
 
      // guardo en una String llamada buscar el contenido del EditText_buscar
                String buscar = EditText_buscar.getText().toString();
 
      // Envio un String llamado datos al metodo buscar_registros que esta en la Clase publica 
      // que maneja la base de datos, y le pasamos el contenido del edit_text (buscar)
                String[] datos;
                datos=db.buscar_nombres(buscar);
 
 
      // Si existe elnombre en la base de datos se muestra el nombre y apellido 
     //  en sus respectivos TextViews
                TextView_nombre.setText(datos[0]);
                TextViev_apellido.setText(datos[1]);
 
      // Si no existe se muestra un toast con el mensje que nos envia la clase DBnombres.java
                Toast.makeText(getApplicationContext(),datos[2],Toast.LENGTH_SHORT).show();
            }
        });


Y este es el metodo que se ejecuta en la clase DBnombres.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public String[] buscar_nombres(String buscar) {
        String[] datos = new String[3];
        SQLiteDatabase database = this.getWritableDatabase();
        String q = "SELECT * FROM nombres WHERE nombre ='" + buscar + "'";
 
        Cursor registros = database.rawQuery(q, null);
 
        if (registros.moveToFirst()) {
            for (int i = 0; i < 2; i++) {
                datos[i] = registros.getString(i);
 
            }
            datos[2] = "Nombre Encontrado Satisfactoriamente";
        } else {
 
            datos[2] = "No se encontro a " + buscar;
        }
        database.close();
        return datos;
    }


Ahora lo que intento es que en vez de rotornarme los datos lo unico que quiero saber es si existe y si existe poder hacer una accion y si no existe otra accion y para ello he de implementar el if else en la activity_buscar pero lo estoy haciendo mal ( y lo se ).
En la activity_buscar ahora lo tengo asi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Boton_buscar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
        DBnombres db = new DBnombres(getApplicationContext(),null,null,1);
        String buscar = EditText_buscar.getText().toString();
        String[] datos;
        datos=db.buscar_nombres(buscar);
 
     //  if(datos = null()) {
 
        if(datos == false()) {
 
            Toast.makeText(getApplicationContext(), " No existe el Nombre", Toast.LENGTH_SHORT).show();
            Intent i = new Intent(getApplicationContext(), NuevaActivity2.class);
            startActivity(i);
            finish();
 
        }
        else
        {
            Toast.makeText(getApplicationContext(), " Si Existe el Nombre", Toast.LENGTH_SHORT).show();
            Intent i = new Intent(getApplicationContext(), NuevaActivity3.class);
            startActivity(i);
            finish();
        }
   });


Y en la Clase DBnombres.java este

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public boolean buscar_nombres(String buscar) {
        String[] datos = new String[3];
        SQLiteDatabase database = this.getWritableDatabase();
        String q = "SELECT * FROM nombres WHERE nombre ='" + buscar + "'";
        Cursor registros = database.rawQuery(q, null);
 
        if (registros.moveToFirst()) {
 
         // Si existe
            return true;
 
        } else {
           // Si no existe
            return false;
        }
        database.close();
    }


No consigo dar con la sintaxis correcta.

Les agradeco si me echan una mano cuando puedan para salir de esta.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 444
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Ayuda con if else

Publicado por juanki (253 intervenciones) el 30/10/2016 01:25:01
Hola

Para empezar, null y false (y true) van si paréntesis, ¡¡no son métodos!!
1
2
     //  if(datos == null) {
        if(datos == false) {

Además false se puede abreviar:
1
if(!datos)

Además, como buscar_nombres retorna un array de String:
1
public String[] buscar_nombres(String buscar)

Puedes comprobar su tamaño para ver si contiene datos:
1
if(datos.length == 0)


Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Francisco
Val: 466
Oro
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Ayuda con if else

Publicado por Francisco (358 intervenciones) el 30/10/2016 13:55:48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
String q = "SELECT count(nombre)  FROM nombres WHERE nombre ='" + buscar + "'";
 
int contador=0;
if (registros.moveToFirst()) {
	do {
 
		contador= registros.getInt(0);
 
	} while(c.moveToNext());
}
 
 
if (contador==0){
 
	Toast.makeText(getApplicationContext(), " No existe el Nombre", Toast.LENGTH_SHORT).show();
	Intent i = new Intent(getApplicationContext(), NuevaActivity2.class);
	startActivity(i);
	finish();
 
 
 
}else{
 
	Toast.makeText(getApplicationContext(), " Si Existe el Nombre", Toast.LENGTH_SHORT).show();
	Intent i = new Intent(getApplicationContext(), NuevaActivity3.class);
	startActivity(i);
	finish();
 
}


Yo siempre lo compruebo asi.
Comenta si te sirvio.
saludos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 197
Plata
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Ayuda con if else

Publicado por Luis (97 intervenciones) el 31/10/2016 23:22:57
Mil gracias Juanky y Francisco por invertir de su tiempo en ayudar.

Francisco su metodo funciona para hacer la consulta desde la misma Activty asi lo tenia antes pero ahora intento hacerlo como se recomienda que se encargue de esas tareas la clase DBusuarios,

Asi que desde la activity llamo al metodo ( db.buscar_nombres ) que esta en la clase DBnombres para hacer la consulta y quiero poder hacer una acion u otra segun sea la respuesta de la Clase.

Juanky He intentado a return datos;

if(datos.length == 0) pero siempre me responde ( Nombre ", "Si encontrado ) y es falso no existe.

Asi estan los metodos.

En la activity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Boton_buscar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
        DBnombres db = new DBnombres(getApplicationContext(),null,null,1);
        String buscar = EditText_buscar.getText().toString();
        String[] datos;
        datos=db.buscar_nombres(buscar);
 
        if(datos.length == 0) {
 
          // Aqui se lanzaria una activity
 
            showMessage("Nombre ", "No encontrado");
 
        }
        else{
 
            // Aqui se lanzaria otra Activity
 
            showMessage("Nombre ", "Si encontrad");
        }
   });


Y en la Clase Dbnombres

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public String[] buscar_nombre(String buscar) {
        String[] datos = new String[3];
        SQLiteDatabase database = this.getWritableDatabase();
        String q = "SELECT * FROM tablastandar WHERE nombre ='" + buscar + "'";
        Cursor registros = database.rawQuery(q, null);
       if (registros.moveToFirst()) {
            for (int i = 0; i < 2; i++) {
                datos[i] = registros.getString(i);
 
            }
            datos[2] = "Nombre Encontrado Satisfactoriamente";
        } else {
 
            datos[2] = "No se encontro a " + buscar;
        }
        database.close();
        return datos;
    }

////////////////////////////////////////////

He intentado lo siguiente pero cuando cambio public String por public boolean el database.close(); me dice ( unrechable statement )

Y en la activity String[] datos;
se cambia por boolean datos;
y claro if (datos.length == 0) { da error el
y el aray datos[2] ya no sirve
y viene el caos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean buscar_nombre(String buscar) {
        String[] datos = new String[3];
        SQLiteDatabase database = this.getWritableDatabase();
        String q = "SELECT * FROM tablastandar WHERE nombre ='" + buscar + "'";
        Cursor registros = database.rawQuery(q, null);
        if (registros.moveToFirst()) {
            return true;
 
            } else {
                  return false;
 
        }
        database.close();
    }


//////////////////////////////////////


Tambien he provado esta forma pero en esta ocasion me dice siempre No encontrado y tampoco esta bien

Esta es la Activity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void  metodo_comprovar() {
 
        DBstandar db = new DBstandar(getApplicationContext(), null, null, 1);
        String buscar = EditText_buscar.getText().toString();
        String[] datos;
        datos = db.buscar_nombre(buscar);
        Toast.makeText(getApplicationContext(), datos[2], Toast.LENGTH_SHORT).show();
 
 
        if (datos[2]== null) {
 
            // Se lanza una activity
            showMessage("Nombre ", "No encontrado");
 
        } else {
 
            // Se lanza otra Activity
            showMessage("Nombre ", "Si encontrado");
        }
    }


Y esta es la Clase Dbnombres

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public String[] buscar_nombre(String buscar) {
        String[] datos = new String[3];
        SQLiteDatabase database = this.getWritableDatabase();
        String q = "SELECT * FROM tablastandar WHERE nombre ='" + buscar + "'";
        Cursor registros = database.rawQuery(q, null);
        if (registros.moveToFirst()) {
            for (int i = 0; i < 2; i++) {
                datos[i] = registros.getString(i);
 
            }
 
        } else {
 
 
        }
        database.close();
        return datos;
 
    }


Como se puede analizar el array datos que nos retorna la Clase DBnombres??
para poder hacer una accion u otra.

Muchas gracias por su tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 197
Plata
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Ayuda con if else

Publicado por Luis (97 intervenciones) el 01/11/2016 23:39:46
Hola de nuevo.

Agradecer los empujones de juanki y Francisco que me ayudaron con sus comentarios, ya pude solucionar el atasco fue un error mio no recordaba que [0] se refiere a la primera columna, [1] a la segunda y asi que al pasar como parametro if (datos[2]== null) { me decia que estaba vacio y es porque ese campo no esta usado ( Sorry )

Esta era la sintaxis correcta.
if (datos[0]== null) {

Aqui dejo el metodo que se uso desde la activity para realizar la consulta y el metodo de la Clase DBnombres donde se realiza la busqueda y envia los datos a la activity.

Espero que a algun usuario le sea de utilidad.

Se acepta cualquier sujerencia para mejorar la funcion que estoy usando.

Muchas gracias y asta el proximo atasco que no tardara.

Metodo comprovacion en la activity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void  metodo_comprovar() {
 
        DBnombres db = new DBstandar(getApplicationContext(), null, null, 1);
        String buscar = textview_nombre.getText().toString();
        String[] datos;
        datos = db.buscar_nombre(buscar);
 
        if (datos[0]== null) {
 
           showMessage("Nombre ", "No encontrado");
 
        } else {
 
            showMessage("Nombre ", "Si encontrado");
 
           // Se lanza otra Activity y finalizo esta para que no se quede en la pila.
 
            Intent i = new Intent(getApplicationContext(), Sorteo.class);
            startActivity(i);
            finish();
        }
    }


Y este es el metodo de la DBnombres que seencarga de buscar y retornar los resultados a la activity


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public String[] buscar_reg(String buscar) {
        String[] datos = new String[3];
        SQLiteDatabase database = this.getWritableDatabase();
        String q = "SELECT * FROM tablanombres WHERE nombre ='" + buscar + "'";
        Cursor registros = database.rawQuery(q, null);
 
        if (registros.moveToFirst()) {
            for (int i = 0; i < 2; i++) {
                datos[i] = registros.getString(i);
 
            }
        }
        database.close();
        return datos;
    }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar