×
×

Error de autenticación

Ha habido un problema a la hora de conectarse a la red social. Por favor intentalo de nuevo

Si el problema persiste, nos lo puedes decir AQUÍ

×

www.androidblog.esMiembro desde: 29/11/12

www.androidblog.es

http://www.androidblog.es

0
Posición en el Ranking
0
Usuarios seguidores
Sus noticias
RSS
  • Visitas
    492.170
  • Publicadas
    395
  • Puntos
    0
Veces compartidas
105
¡Consigue las insignias!
Trimestrales
Recientes
Visitas a noticias
16/01/2013

image

En el Anterior post sobre programación en Android veíamos como crear un menú en Android, y para ir viendo el proceso habíamos creado una aplicación que muestra una con una serie de tipos de cervezas, ahora le toca el turno a la creación de esta lista. Pero como de algún sitio tenemos que recuperar los datos, nos vamos a apoyar en la persistencia, y así además aprovechamos y hechamos un vistazo a SQLite en Android.

Vamos a comenzar con SQLite en esta primera parte para luego poder usarla en la creación de la lista en la segunda.

SQLite es un motor de bases de datos muy popular en la actualidad gracias en parte al uso de dispositivos portátiles, que utiliza como su nombre indica lenguaje SQL y sus principales ventajas son:

  • Reducido Tamaño
  • Server Less, No necesita servidor puede ser usada de forma local en un dispositivo y no es necesario un servidor del tipo de Apache por ejemplo
  • Permite transacciones
  • Es código libre

Android facilita una completa Api para el manejo de esta base de datos y poder así gestionar la información de tu aplicación y el primer paso para ello radica en el uso de la clase auxiliar SQliteOpenHelper, la cual hay que extender y personalizar según las necesidades que se requieran. Cuenta con un constructor y dos métodos que debes sobrescribir en tu clase personalizada, estos métodos son : onCreate() y onUpdate().

Por lo que creamos una clase en nuestro proyecto que extienda de la clase citada y sobrescriba dichos métodos (Cuando crees la clase eclipse te mandará un aviso pidiéndote que los utilices), para la aplicación de ejemplo quedaría así:

public class SQliteHandler extends SQLiteOpenHelper{
  public SQliteHandler(Context context, String name, CursorFactory factory, 
			int version) {}
  @Override
  public void onCreate(SQLiteDatabase db) {}

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

}

Vamos a pasar a explicar dichos méotdos:

onCreate: Lanzado cuando la base de datos es creada, y ¿cuando se crea?, pues cuando instancias por primera vez la clase que has creado ahora mismo y no existe la base de datos, en ese momento es donde se debe crear la estructura de tablas, es Android el que gestiona la creación del archivo y su localización por defecto. El método proporciona un objeto SQLiteDatabase sobre el que se ejecutan las sentencias.

onUpgrade:Lanzado cuando se debe actualizar la base de datos, y ¿cuando se actualiza? pues cuando instancias por primera vez la clase existe un parámetro de tipo int llamado version, que es el que define la versión en que será creada la base de datos. Si instancias la clase por primera vez pasando la versión 1 y mas tarde con otra versión este método será lanzado al no existir la versión de esta base de datos. Aquí es donde procede realizar cambios por ejemplo al actualizar la aplicación y quieres añadir una nueva tabla, pues el método onCreate no será llamado a no ser que la base de datos sea destruida borrando los datos de la aplicación. Una buena práctica para la gestión de las versiones es definir una constante en tu clase personalizada que defina la versión actual y así no tener que ir revisando las instancias una a una

  public static int DBVERSION = 1;

Ahora vamos a rellenar los métodos con contenido:

public void onCreate(SQLiteDatabase db) {
  String sql = "CREATE TABLE beers( _id INTEGER PRIMARY KEY AUTOINCREMENT, nombre text, descripcion TEXT, tipo TEXT)";
  db.execSQL(sql);
  sql = "INSERT INTO beers(nombre, descripcion, tipo) VALUES('Weizenbier', 'Cerveza elaborada con la levadura de la cerveza en muy altas temperaturas', 'Cerveza de Trigo')";
  db.execSQL(sql);
  sql = "INSERT INTO beers(nombre, descripcion, tipo) VALUES('Burton ale', 'Cervezas elaboradas en Staffordshire, Inglaterra', ' Ale')";
  db.execSQL(sql);
  sql = "INSERT INTO beers(nombre, descripcion, tipo) VALUES('Dopplebock', 'Cerveza alemana extrafuerte de fermentación baja y color oscuro', ' Lager')";
  db.execSQL(sql);
}

En el método onCreate creamos una tabla por el momento que es la que almacenará las cervezas y cuenta con 4 campos. Si en el futuro necesitamos más las crearemos. Se han introducido 4 cervezas de muestra por el momento Las consultas son lanzadas mediante el objeto db que representa al archivo de la base de datos.

Ahora que ya tenemos la clase vamos a realizar un ejemplo de como se usa en tu aplicación y en la próxima parte el ejemplo práctico de como usarlo en nuestra aplicación de cervezas. Por ejemplo si quisiéramos usarla en nuestra app, procederíamos de esta forma:

  SQliteHandler sqlite = new SQliteHandler(getApplicationContext(), "spokenapps", null, 
  SQliteHandler.DB_VERSION);
  SQLiteDatabase db = sqlite.getWritableDatabase();// o sqlite.getReadableDatabase();
  1. Instanciamos la clase con los parámetros con Context, ‘Nombre de Tabla’, CursorFactory(que normalmente es null) y versión de la base de datos
  2. Obtenemos una base de datos en formato de escritúra (‘INSERT, DELETE, UPDATE) o escritura (SELECT)

Y ahora en primer lugar vamos a ver como se consulta la misma:

SQliteHandler sqlite = new SQliteHandler(this, "birras", null, SQliteHandler.DBVERSION);
SQLiteDatabase db = sqlite.getReadableDatabase();
String[] columns = new String[]{"name", "description", "type"};

        Cursor c;
// Los campos de esta funcion son los siguientes  
  // db.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit)     
  c = db.query("beers", columns, "_id = 1", null, null, null, null, null); c.moveToFirst(); while(!c.isAfterLast()){ Log.d("debug", "Beer==> Name:"+c.getString(0)+" Description:"+c.getString(1)+" Type:"+c.getString(2)); c.moveToNext(); } c.close(); db.close();
  1. Instanciamos la clase como hemos visto antes
  2. Creamos un String[] con los nombres de las columnas de la tabla que queremos recuperar
  3. Creamos un objeto de la clase Cursor y recibimos el cursor que devuelve la función query del objeto db. La función query tiene variaciones diferentes, puedes usar el que más te convenga. y tiene un campo donde especificas la clausula WHERE sin incluir esa misma palabra ( selection ), se puede utilizar la sintaxis con ‘ ? ‘ para evitar inyecciones y escapar caracteres.
  4. Solo queda recorrer el cursor y hacer lo que se quiera con los valores que se obtienen por orden y dependiendo del tipo que tengan se usa un método u otro, en este caso como son cadenas de texto c.getString( num )

Y Ahora si quieres realizar un insert o update se utiliza una sintaxis similar

        SQliteHandler sqlite = new SQliteHandler(this, "birras", null, SQliteHandler.DBVERSION);
        SQLiteDatabase db = sqlite.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("Name", "Cerveza Nueva");
        values.put("Description", "Is a new Beer");
        values.put("Type", "Black Beer");

        db.insert("beers", null, values);

Es similar a la anterior pero aquí se hace uso de un objeto ContentValues. Es un objeto donde se almacenan los valores que quieres insertar o actualizar. Mediante el método put estableces los valores, en nuestro caso el primer valor que corresponde al nombre del campo donde va cada valor, el campo _id como hemos dicho que es auto numérico no hace falta insertarlo. Para actualizar se utiliza db.update() en el que además hay que especificar los registros que se actualizarán mediante la clausula WHERE. El objeto ContentValues determinará en este caso que nuevos valores tomarán las columnas de los registros que quieras coincidan con la clausula WHERE. No es necesário especificar todos los campos, si solo quisieras cambiar el nombre de una cerveza por ejemplo solo tendrías que incluir values.put(‘Name’, ‘Nuevo Nombre’).

Y un delete es más simple :

   String[] whereArgs = new String[]{"1", "Cerveza1"};
   db.delete(table, "_id = ? and Name = ?", whereArgs );

Se elige el nombre de la tabla en el primer campo, las condiciones en el segunda campo y los valores en el tercero. En este caso significa que borre los registros cuyo campo ‘_id’ sea igual 1. Esta forma de especificar la clausula where se puede utilizar para las acciones anteriores menos para el intert que no incluye clausula where. El carácter ‘ ? ‘ se substituye por los valores del String[] en el orden en el que aparezcan, por lo que sería que el campo _id = 1 y el campo Name = ‘Cerveza1″

En el siguiente tutorial seguimos con la lista ayudándonos en la base de datos pero por ahora aquí tenemos la clase al completo hasta el momento:

e>

Más votadas de www.androidblog.es

Programación en Android : Menús

Programación en Android : Menús

Vamos a iniciar una serie de tutoriales sobre programación Andoid. El objetivo es aprender más cosas sobre las opciones de desarrollo que ofrece Android y para ello vamos a crear una aplicación a la que poco a poco iremos añadiendo funcionalidades con el objetivo de abarcar muchos temas diferentes 27/12/2012

Las mejores Apps de TV para Android

Las mejores Apps de TV para Android

Con la llegada de las vacaciones y del buen tiempo nada mejor que un especial veraniego sobre las mejores apps de TV disponibles para Android. Hemos seleccionado para vosotros, de entre todas las aplicaciones, lo mejor de lo mejor para que hagais un uso inteligente de la televisión 19/08/2013

Auditar redes wifi con Router Keygen 3.2.0 APK

Auditar redes wifi con Router Keygen 3.2.0  APK

Router Keygen es una de las mejores aplicaciones para auditar redes Wifi por medio de dispositivos Android. Con la nueva actualización se solucionan algunos problemas con routers y otros pequeños bugs 20/01/2013

Google Reader cierra el 1 de julio

Google Reader cierra el 1 de julio

Pues sí, la noticia salto ayer día 13, Google, dentro de su Spring Cleaning, o lo que es lo mismo, discontinuar los programas, servicios y herramientas que consideran poco útiles, va a dar de baja, o jubilar como dicen ellos, el próximo 1 de Julio a Google Reader 15/03/2013

ROMs para actualizar Samsung Galaxy S GT-I9000 a Android 4.2

Para los que tengáis un Samsung Galaxy S I9000, hoy os daremos algunas ROMs de Android 4.2 para que las podáis ir probando si queréis. Hace unas semanas ya os presentamos la CreedRom V10. Hoy tenemos su versión 11, y aparte otras ROMs con buen funcionamiento 18/12/2012

Mostrando: 1-5 de 397