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