Download Aplicación - Grupo ARCO
Document related concepts
no text concepts found
Transcript
Curso 12/13 Desarrollo de Aplicaciones Android Persistencia Desarrollo de aplicaciones Android Mecanismos de persistencia ● Preferencias ● Sistema de ficheros (privado) ● Bases de datos SQLite ● Almacenamiento externo (público) ● Conexiones de red App. Lista de tareas © Grupo Arco 2 Desarrollo de aplicaciones Android Preferencias ● ● ● Las preferencias son una forma sencilla (aunque limitada) para guardar configuración de una aplicación. Se almacenan pares clave-valor. Parecido al registro de Windows o al servicio gconf de GNOME. Los valores pueden tener solo tipos de datos básicos. App. Lista de tareas © Grupo Arco 3 Desarrollo de aplicaciones Android Preferencias public class Settings extends Activity { public static final String PREFS_NAME = "MySettings"; @Override protected void onCreate(Bundle state){ super.onCreate(state); settings = getSharedPreferences(PREFS_NAME, 0); silent = settings.getBoolean("silentMode", false); } @Override protected void onStop(){ super.onStop(); settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", silent); editor.commit(); } App. Lista de tareas © Grupo Arco 4 Desarrollo de aplicaciones Android Almacenamiento interno ● ● En Android el sistema de ficheros es local, solo accesible para la propia aplicación. Streams de entrada y salida similares a los estándar de Java. String string = "hello world!"; FileOutputStream fos = openFileOutput(“hello.txt”, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close(); App. Lista de tareas © Grupo Arco 5 Desarrollo de aplicaciones Android Bases de datos: SQLite ● ● Es una base de datos SQL ligera. Las consultas retornan «cursores»: objetos que pueden utilizarse para iterar sobre los datos devueltos. ● moveTo... ● getCount ● getColumnName ● getPosition App. Lista de tareas © Grupo Arco 6 Desarrollo de aplicaciones Android database.sqlite.SQLiteOpenHelper Es una clase para encapsular el acceso a la base de datos. Métodos importantes: ● onCreate ● onUpgrade ● onDestroy App. Lista de tareas © Grupo Arco 7 Desarrollo de aplicaciones Android TaskHelper class TaskHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME="TaskList.db"; private static final int SCHEMA_VERSION=1; private Cursor cursor = null; public TaskHelper(Context context) { super(context, DATABASE_NAME, null, SCHEMA_VERSION); cursor = this.getAll(); } private Cursor getAll() { return(getReadableDatabase().rawQuery("SELECT _id, description, priority, day, month, year FROM tasks ORDER BY _id", null)); } Abre la base de datos App. Lista de tareas Realiza una consulta SQL y obtiene Todos los registro © Grupo Arco 8 Desarrollo de aplicaciones Android onCreate / onUpgrade / onDestroy @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE tasks (_id INTEGER PRIMARY KEY AUTOINCREMENT, description INT, priority INT, day INT, month INT, year INT);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public void onDestroy() { cursor.close(); } Libera el cursor App. Lista de tareas Encargada de crear la base de datos si no existe. Utilizada para modificar la base De datos si hay cambio de versión © Grupo Arco 9 Desarrollo de aplicaciones Android Guardando tareas Se añaden los métodos necesarios para manipular el almacenamiento: Contenedor genérico de valores public void add(Task task) { ContentValues cv=new ContentValues(); cv.put("description", task.getDescription()); cv.put("priority", task.getPriority()); Acceso de escritura a la BBDD cv.put("day", task.getDay()); cv.put("month", task.getMonth()); cv.put("year", task.getYear()); getWritableDatabase().insert("tasks", "description", cv); // resto de inserts cursor.requery(); } public void remove(int position) { this.db.delete(TaskHelper.DB_TABLE, "_id=" + position, null); } App. Lista de tareas © Grupo Arco 10 Desarrollo de aplicaciones Android Recuperando tareas public Task getTaskFromCursor(Cursor c) { Task t = new Task(c.getString(1), c.getInt(2), c.getInt(3), c.getInt(4), c.getInt(5)); return t; } public Task get(int position) { cursor.moveToPosition(position); return getTaskFromCursor(cursor); } App. Lista de tareas © Grupo Arco 11 Desarrollo de aplicaciones Android Aplicación «Lista de tareas» ● Cambiamos nuestro ArrayList<Task> por el TaskHelper. ● Los datos ahora se almacenarán en una BBDD, en lugar de la lista variable TaskHelper tasks = new TaskHelper(this); ● Inicializamos el cursor de SQLite; startManagingCursor(tasks.getCursor()); App. Lista de tareas © Grupo Arco 12 Desarrollo de aplicaciones Android TaskAdapter ● ● Reemplazamos el Adaptador de la lista por otro adecuado a la BBDD (derivado de CursorAdapter) El adaptador debe manejar ahora 2 eventos: class TaskAdapter extends CursorAdapter { TaskAdapter() { super(TodoList.this, tasks.getCursor()); } } App. Lista de tareas © Grupo Arco 13 Desarrollo de aplicaciones Android TaskAdapter ● El adaptador debe manejar 2 eventos Clase encargada de rellenar la fila Asocia una vista (fila) existente con un cursor Crea una nueva vista (fila) 1. Al crear la vista se asocia como una etiqueta 2. al asociar la vista, se encarga de visualizar la inf. contenida en el cursor @Override public void bindView(View row, Context ctxt, Cursor c) { TaskHolder holder = (TaskHolder)row.getTag(); holder.populateFrom(tasks.getTaskFromCursor(c)); } @Override public View newView(Context ctxt, Cursor c, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); View row = inflater.inflate(R.layout.row, parent, false); TaskHolder holder = new TaskHolder(row); row.setTag(holder); return(row); } App. Lista de tareas © Grupo Arco 14