Aplicación - Grupo ARCO

Anuncio
Desarrollo de
aplicaciones
Android
Desarrollo de
aplicaciones
Android
Mecanismos de persistencia
Preferencias
●
Preferencias
●
Sistema de ficheros (privado)
●
Bases de datos SQLite
●
●
●
Almacenamiento externo (público)
●
Conexiones de red
●
App. Lista de tareas
© Grupo Arco
2
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
Desarrollo de
aplicaciones
Android
Desarrollo de
aplicaciones
Android
Preferencias
Almacenamiento interno
●
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);
}
●
© Grupo Arco
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!";
@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
3
FileOutputStream fos =
openFileOutput(“hello.txt”, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
4
App. Lista de tareas
© Grupo Arco
5
●
●
Desarrollo de
aplicaciones
Android
Desarrollo de
aplicaciones
Android
Bases de datos: SQLite
database.sqlite.SQLiteOpenHelper
Es una base de datos SQL ligera.
Es una clase para encapsular el acceso a la base
de datos.
Las consultas retornan «cursores»: objetos que
pueden utilizarse para iterar sobre los datos
devueltos.
●
Métodos importantes:
moveTo...
●
getCount
●
getColumnName
●
getPosition
App. Lista de tareas
© Grupo Arco
6
●
onCreate
●
onUpgrade
●
onDestroy
App. Lista de tareas
© Grupo Arco
Desarrollo de
aplicaciones
Android
Desarrollo de
aplicaciones
Android
TaskHelper
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);");
}
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();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
}
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
public void onDestroy() {
cursor.close();
}
Realiza una consulta SQL y obtiene
Todos los registro
© Grupo Arco
7
Libera el cursor
8
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
Desarrollo de
aplicaciones
Android
Guardando tareas
Recuperando tareas
Se añaden los métodos necesarios para
manipular el almacenamiento:
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;
}
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 Task get(int position) {
cursor.moveToPosition(position);
return getTaskFromCursor(cursor);
}
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
Desarrollo de
aplicaciones
Android
Aplicación «Lista de tareas»
TaskAdapter
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);
●
App. Lista de tareas
© Grupo Arco
11
Reemplazamos el Adaptador de la lista por otro
adecuado a la BBDD (derivado de
CursorAdapter)
El adaptador debe manejar ahora 2 eventos:
Inicializamos el cursor de SQLite;
startManagingCursor(tasks.getCursor());
class TaskAdapter extends CursorAdapter {
TaskAdapter() {
super(TodoList.this, tasks.getCursor());
}
}
App. Lista de tareas
© Grupo Arco
12
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
Descargar