El documento proporciona una introducción a los diferentes métodos de almacenamiento de datos en Android, incluyendo Preferences, archivos locales, bases de datos SQLite y Content Providers. Explica cómo acceder y manipular datos con cada uno de estos métodos y proporciona ejemplos de código.
5. Almacenamiento de datos: Preferences (II) import android.app.Activity; import android.content.SharedPreferences; public class Calc extends Activity { public static final String PREFS_NAME = "MyPrefsFile" ; . . . @ Override protected void onCreate(Bundle state) { super .onCreate(state); . . . // Restore preferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean( "silentMode" , false ); setSilent (silent); } @Override protected void onStop(){ super .onStop(); // Save user preferences. We need an Editor object to // make changes. All objects are from android.context.Context SharedPreferences settings = getSharedPreferences( PREFS_NAME , 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean( "silentMode" , mSilentMode ); // Don't forget to commit your edits!!! editor.commit(); } } Acceso a datos en Android
6.
7.
8.
9.
10.
11.
12.
13. Almacenamiento de datos: SQLite querys // Return all rows for columns one and three, no duplicates String[] result_columns = new String[] {KEY_ID, KEY_COL1, KEY_COL3}; Cursor allRows = myDatabase.query( true , DATABASE_TABLE, result_columns, null , null , null , null , null , null ); // Return all columns for rows where column 3 equals a set value // and the rows are ordered by column 5. String where = KEY_COL3 + “=” + requiredValue; String order = KEY_COL5; Cursor myResult = myDatabase.query(DATABASE_TABLE, null , where, null , null , null , order); Acceso a datos en Android
14. Almacenamiento de datos: SQLite resultados int GOLD_HOARDED_COLUMN = 2; Cursor myGold = myDatabase.query(“GoldHoards”, null , null , null , null , null , null ); float totalHoard = 0f; // Make sure there is at least one row. if (myGold.moveToFirst()) { // Iterate over each cursor. do { float hoard = myGold.getFloat(GOLD_HOARDED_COLUMN); totalHoard += hoard; } while (myGold.moveToNext()); } float averageHoard = totalHoard / myGold.getCount(); Acceso a datos en Android
15. Almacenamiento de datos: SQLite Añadir un nuevo registro // Create a new row of values to insert. ContentValues newValues = new ContentValues(); // Assign values for each row. newValues.put(COLUMN_NAME, newValue); [ ... Repeat for each column ... ] // Insert the row into your table myDatabase.insert(DATABASE_TABLE, null , newValues); Acceso a datos en Android
16. Almacenamiento de datos: SQLite Modificar un registro // Define the updated row content. ContentValues updatedValues = new ContentValues(); // Assign values for each row. updatedValues.put(COLUMN_NAME, newValue); [ ... Repeat for each column ... ] String where = KEY_ID + “=” + rowId; // Update the row with the specified index with the new values. myDatabase.update(DATABASE_TABLE, updatedValues, where, null ); Acceso a datos en Android
25. Acceso a datos en Android Si no hay, vamos con el sorteo de la camiseta Preguntas???
26. Acceso a datos en Android Fernando Cejas [email_address] [email_address] @fernando_cejas http://www.android10.org/ MUCHAS GRACIAS!!!
Notas del editor
Presentación
Y si actualizamos una aplicación en el market, estos datos quedan también
Concepto de sandbox Y comentar el ejemplo de que con permisos de root, nos pueden robar nuestras aplicaciones, como se pueden devolver durante 2 días después de la compra.
El directorio de caché lo utiliza android para justamente guardar datos de caché, de la ejecución de la aplicación, etc. En el ejemplo de
Mostrar donde se crea la base de datos con el File Explorer. Mostrar los ejemplos con un select y un delete y luego ejecutar de nuevo el ejemplo para ver que se crearon los registros. Mostrar en el ejemplo también los cambios de versiones en las bases de datos: por ejemplo también si se pasa desde una versión 2 a una 4. Explicar el tema de cursores e intentar dibujarlos
Único mecanismo para compartir datos entre app ya que no hay áreas comunes. Los datos pueden estar en Files, SQLite,…, pero son propios de cada app. Si quieres compartir datos o creas contentProvider o públicas en otro. Las apps que quieren datos hablan con el ContentResolver. Los datos se tienen que presentar en forma de tablas.
Android nos provee de content providers que podemos utilizar, aunque también podemos crear los nuestros. Hay un listado grandísimo de los content providers que nos provee android: http:// developer.android.com/reference/android/provider/package-summary.html
Hay una sola instancia de ContentProvider pero el sistema interactúa con este a través de muchas instancias de ContentResolver
Cada fila contiene su único _ID Digamos que para leer un campo debemos saber el tipo de dato que ese campo contiene. Para consultar un content provider debemos una uri.
Content: schema que identifica los datos controlados por un ContentProvider Cada content resolver toma la URI como primer argumento para identificar con que provider hablar, y como segundo, la “tabla” que vamos a consultar.
You need three pieces of information to query a content provider: The URI that identifies the provider The names of the data fields you want to receive The data types for those fields If you're querying a particular record, you also need the ID for that record.
A managed Cursor handles all of the niceties, such as unloading itself when the activity pauses, and requerying itself when the activity restarts. You can ask an Activity to begin managing an unmanaged Cursor object for you by calling Activity.startManagingCursor () . Buena práctica: siempre obtener los campos que son necesarios, digamos los que vamos a usar. Esto es para performance.
Siempre que trabajemos con content providers es importante ver los permisos que requieren los mismos. Una lista de permisos se puede ver en: http://developer.android.com/reference/android/Manifest.permission.html