Home Menu

Menu



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 15/09/15, 10:39:17
Avatar de fervillagon
fervillagon fervillagon no está en línea
Usuario poco activo
Mensajes: 3
 
Fecha de registro: ago 2015
Mensajes: 3
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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   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: 17:52:04 (GMT +1)

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