Está en la página 1de 33

Cursos de orientacin profesional

ACCIONES COFINANCIADAS CON FONDOS COMUNITARIOS DEL FONDO SOCIAL EUROPEO, A TRAVS DEL PROGRAMA OPERATIVO FONDO SOCIAL EUROPEO DE CANARIAS 20072013 CON UN PORCENTAJE DE CONFINANCIACIN DEL 85%.

Da 1 Qu es Android? Actividades e intenciones Da 2 Layouts y controles grficos Recursos, mens y dilogos Da 3 Persistencia de datos y content providers Grficos y animaciones 2D y 3D Da 4 Servicios en segundo plano Control del hardware especial Da 5 App Widgets y Live folders Publicacin de aplicaciones

Creacin de aplicaciones mviles en Android

Yeray Caballero yeraycaballero@gmail.com Instituto SIANI

Tipos de almacenamiento Preferencias y estado de la UI Sistema de ficheros Base de datos SQLite Content provider

Tipos de almacenamiento Preferencias y estado de la UI Sistema de ficheros Base de datos SQLite Content provider

Existen varias alternativas para salvar los datos de la aplicacin, cada una pensada para un fin especfico. Como mnimo una actividad tiene que salvar El estado de la interfaz de usuario Las preferencias del usuario sobre el funcionamiento de la aplicacin

Alternativas para guardar los datos:


Preferencias Ficheros Base de datos Content Provider Un content provider no es en s un mecanismo de almacenamiento, sino un medio para compartir datos entre aplicaciones

Tipos de almacenamiento Preferencias y estado de la UI Sistema de ficheros Base de datos SQLite Content provider

En android hay dos tcnicas ligeras para guardar datos de aplicacin

Preferencias Pensadas para guardar preferencias de la aplicacin SaveInstanceHanlder Diseado especificamente para guardar el estado de la interfaz de usuario. Antes de matar a una actividad se llama al onSaveInstanceState para guardar el estado de la UI y que esta se pueda recuperar en el futuro. La recuperacin del estado se realiza cuando se llama al onCreate o al onRestoredInstanceState

Creando y salvando preferencias


SharedPreferences pref = null; protected void savePreferences(){ int mode = Activity.MODE_PRIVATE; pref = getSharedPreferences(mypre, mode); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean(isSilentMode, true); editor.commit(); }

Se puede acceder a la preferencias a travs del Contexto Un actividad hereda del contexto

Recuperando preferencias
SharedPreferences pref; protected void restorePreferences(){ int mode = Activity.MODE_PRIVATE; pref = getSharedPreferences(MYPREFS, mode); nameValue = pref.getString("name", ""); phoneValue = pref.getString("phone", ""); }

Existen tres modos de acceso:


Context.MODE_PRIVATE Context.MODE_WORLD_READABLE Context.MODE_WORLD_WRITEABLE

Guardando el estado de una actividad


@Override public void onSaveInstanceState(Bundle state) { TextView tv = (TextView)findViewById(R.id.view); String textValue = tv.getText().toString(); state.putString(TEXTVIEW_STATE_KEY, textValue); super.onSaveInstanceState(state); }

Una actividad pausada puede ser parada por el sistema si ste necesita ms recursos. Antes de parar la actividad se llama a onSaveInstanceState para que sta guarde su estado.

Recuperando el estado de una actividad


public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.view); String text = ""; if (savedInstanceState != null && savedInstanceState.containsKey(TEXTVIEW_STATE_KEY)) { text = savedInstanceState.getString(TEXTVIEW_STATE_KEY); myTextView.setText(text); } }

El estado anterior es pasado a los mtodos onRestoreInstanceState y onCreate

Tipos de almacenamiento Preferencias y estado de la UI Sistema de ficheros Base de datos SQLite Content provider

Existen varias formas de acceder al sistema de ficheros. Depende de la ubicacin y formato de los mismos.

Ficheros dentro de la aplicacin Raw files que son incluidos como recursos Fichero XML personalizados

Ficheros dentro de la aplicacin


Java I/O openFileInput y openFileOuput


El nombre del archivo no puede contener separadores de path El archivo creado es por defecto privado a la aplicacin Hay que recodar llamar al close
FileOutputStream fos; FileInputStream fis; String FILE_NAME = "temp.tmp"; //Crea un fichero de salida privado a la aplicacin. fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE); //Crea un fichero de entrada FileInputStream fis = openFileInput(FILE_NAME);

Raw files que son incluidos como recursos Archivos guardados en res/raw/datafile se pueden leer Resources.openRawResoure(R.raw.datafile) Estos archivos no son compilados
Resources resources = this.getResources(); InputStream is = null; try { is = resources.openRawResource(R.raw.people); byte[] reader = new byte[is.available()]; while (is.read(reader) != -1){} this.readOutput.setText(new String(reader)); } catch (IOException e) { Log.e("ReadRawResourceFile", e.getMessage(), e); }

Ficheros XML personalizados


No se usa un stream para acceder a ellos Estos archivos son compilados por la plataforma (Eficiencia) Se pueden leer con un XMLPullParser
<people> <person firstname="John" lastname="Ford" /> <person firstname="Alfred" lastname="Hitchcock" /> <person firstname="Stanley" lastname="Kubrick" /> </people>

Tipos de almacenamiento Preferencias y estado de la UI Sistema de ficheros Base de datos SQLite Content provider

Android incluye una librera de SQLite


Open source Proporciona capacidades de una base de datos relacional La usan el Iphone, el ipod, etc

Todas las bases de datos se crean en la carpeta /data/data/<package-name>/databases Por defecto las bases de datos son privadas a la aplicacin Para compartir datos entre aplicaciones se usarn los Content Providers.

Cursor

Android devuelve el resultado de las consultas a la base de datos en un objeto Cursor. Un Cursor no es ms que un puntero a un conjunto de datos. Incluye mtodos para moverse por los datos:
moveToFirst moveToNext moveToPrevious isFirst isLast ...

Cursor

El programador debe llamar el mtodo close del cursor para liberar los recursos tomados y llamar a deactivate y requery cuando sea necesario. Sin embargo, Android ofrece el mtodo managedQuery (...) el cual gestiona el ciclo de vida del cursor por nosotros asocindolo al ciclo de vida de la actividad. Llamar a este mtodo es la manera ms sencilla y ptima para trabajar con cursores desde una actividad

Mtodos importantes de un cursor: Close Cierra el cursor liberando completamente los recursos tomados Deactivate Desactiva el cursor haciendo que fallen todas las llamadas al cursor hasta que se llame a requery. (Librera recursos) Requery Lanza de nuevo la consulta que cre el cursor, refrescando su contenido.

Lanzando una consulta


String[] resultColumns = new String[] { KEY_ID, NAME, DESCRIPTION }; Cursor cursor = db.query(true, DATABASE_TABLE, resultColumns, null, null, null, null);

Insertando un nuevo registro


ContentValues newValues = new ContentValues(); newValues.put(NAME, "android"); newValues.put(DESCRIPTION, ...); db.insert(DATABASE_TABLE, null, newValues);

Actualizando filas
ContentValues updatedValues = new ContentValues(); updatedValues.put(NAME, "peter"); String where = KEY_ID + "=" + 1; db.update(DATABASE_TABLE, updatedValues, where, null);

Borrando filas
db.delete(DATABASE_TABLE, KEY_ID + "=" + rowId, null);

Tipos de almacenamiento Preferencias y estado de la UI Sistema de ficheros Base de datos SQLite Content provider

Proveen de contenidos a las aplicaciones y permite compartir datos entre ellas Desacopla la aplicacin de la capa de datos Modelo URI simple para operaciones CRUD Muchas aplicaciones nativas publican sus proveedores de contenidos ContactsProvider MediaProvider Tambin se pueden crear content provider nuevos

Un content provider implementa la interfaz


query(Uri, String[], String, String[], String) insert(Uri,ContentValues) update(Uri,ContentValues, String, String[]) delete(Uri, String, String[]) getType(Uri)

El acceso a un content provider es gestionado por un content resolver


El content provider analizar el resto de la URI mediante un UriMatcher

Un content provider expone una URI pblica, la cual identifica un conjunto de datos, una tabla. La URIs de los proveedores comienzan por conent:// Normalmente un content provider expone dos URIs.
content://contacts/people

informacin de todas las informacin persona con id = 1

personas content://contacts/people/1

content://contacts/people
esquema autorida d path

Consultado un content provider I


String[] projection = new String[] { People._ID, People._COUNT, People.NAME, People.NUMBER }; Uri contacts = People.CONTENT_URI; Cursor cursor = managedQuery(contacts, projection, // Which columns to return null, // Which rows to return (all rows) null, // Selection arguments (none) People.NAME + " ASC"); // order asc by name

Consultado un content provider II


Uri myPerson = ContentUris.withAppendedId(People.CONTENT_URI, 23); Cursor cursor = managedQuery(myPerson, null, null, null, null);

Insertando datos en un content provider


ContentValues values = new ContentValues(); values.put(People.NAME, "Abraham Lincoln"); values.put(People.STARRED, 1); Uri uri = getContentResolver().insert(People.CONTENT_URI, values);

Creacin de aplicaciones mviles en Android

Aplicacin que demuestra el uso de los content providers

Persistencia de datos y content providers


Android Developer Reference
http://developer.android.com/guide/topics/data/data-storage.html http://developer.android.com/guide/topics/providers/content-providers.html

Android Application Development


Reto Meier, Editorial Wrox

También podría gustarte