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

Respuesta
 
Herramientas
  #1  
Viejo 15/09/15, 10:39:17
Array

[xs_avatar]
fervillagon fervillagon no está en línea
Usuario poco activo
 
Fecha de registro: ago 2015
Mensajes: 3
Tu operador: Movistar

Ayuda con ArrayList y ContentValues en DBController.java

Hola a todos.
A ver si alguien me puede echar una mano con este tema.

Tengo una aplicación con una base de datos que me devuelve resultados de acuerdo a a querys SQL. Todas esas querys las tengo en el archivo DBController.java que es desde donde creo, actualizo y ejecuto la base de datos.

Cada vez que tengo que definir una nueva query SQL copio, pego y adapto un pedazo de codigo como el siguiente:

Código:
public ArrayList<HashMap<String, String>> DevolverResultado1() {

        ArrayList<HashMap<String, String>> listado12pa;
        listado12pa = new ArrayList<HashMap<String, String>>();
        String selectQuery = "SELECT * FROM nombretabla WHERE campo1 LIKE 'palabra%' AND campo2!='--' ORDER BY campo3";
        SQLiteDatabase database = this.getWritableDatabase();
        Cursor cursor = database.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("id", cursor.getString(0));
                map.put("campo1", cursor.getString(1));
                map.put("campo2", cursor.getString(2));
                map.put("campo3", cursor.getString(3));
                map.put("campo4", cursor.getString(4));
                map.put("campo5", cursor.getString(5));
                map.put("campo6", cursor.getString(6));
                map.put("campo7", cursor.getString(7));
                map.put("campo8", cursor.getString(8));
                map.put("campo9", cursor.getString(9));
                map.put("campo10", cursor.getString(10));
                map.put("campo11", cursor.getString(11));
                map.put("campo12", cursor.getString(12));
                map.put("campo13", cursor.getString(13));
                map.put("campo14", cursor.getString(14));
                map.put("campo15", cursor.getString(15));
                map.put("campo16", cursor.getString(16));
                map.put("campo17", cursor.getString(17));
                map.put("campo18", cursor.getString(18));
                map.put("campo19", cursor.getString(19));
                map.put("campo20", cursor.getString(20));
                map.put("campo21", cursor.getString(21));
                map.put("campo22", cursor.getString(22));
                map.put("campo23", cursor.getString(23));
                map.put("campo24", cursor.getString(24));
                map.put("campo25", cursor.getString(25));
                map.put("campo26", cursor.getString(26));
                map.put("campo27", cursor.getString(27));
                map.put("campo28", cursor.getString(28));
                map.put("campo29", cursor.getString(29));
                listado12pa.add(map);
            } while (cursor.moveToNext());
        }
        return listado12pa;
    }
Quiero saber como puedo optimizar lineas de codigo y no tener que repetir tanto código cada vez que quiero definir una nueva consulta sql.

Antes trabajaba con un "contentValues" y tiraba menos lineas, pero ahora e implantado otros métodos en toda la aplicación y necesito optimizar con estos "arrayslist", ademas de que para mi es más cómodo tirar las consultas SQL literalmente y no con lineas del tipo "db.execSQL" como hacia con el "contentValues".

Gracias de antemano.
Responder Con Cita


  #2  
Viejo 15/09/15, 12:25:47
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
La forma correcta es tener modelos, un modelo por cada tabla, y no trabajar con HashMap.

Por ejemplo tienes la tabla "persona" que tiene los campos "id", "nombre", "apellidos"

Creas una clase llamada Persona con los mismos campos en forma de propiedades, y un método:

public static Persona fromCursor(Cursor c)
{
Persona p = new Persona();
p.id = c.getString(0);
p.nombre = c.getString(1);
p.apellidos = c.getString(2);
return p;
}

De tal forma que en tu método, en vez de devolver un ArrayList<HashMap<String,String>> devuelves un ArrayList<Persona>

Y en vez de crear el HashMap y meterle todos los campos haces:

listado12pa.add(Persona.fromCursor(cursor));

Con esto lo que consigues es que en todos los métodos donde trabajas con la tabla Persona sólo tendrás que escribir 1 línea. Además tu código será más legible, porque donde llamas a DevolverResultado1 verás que es una Persona, y no un HashMap que puede ser cualquier cosa.

Lógicamente necesitas 1 modelo por cada tabla. Pero si tienes 10 métodos que usan a la tabla "persona" ahorras mucho código y claridad.
Responder Con Cita
Respuesta

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



Hora actual: 20:46:34 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /