• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Desarrollo android    almacenamiento de datos
 

Desarrollo android almacenamiento de datos

on

  • 19,912 views

Charla de acceso a datos por Fernando Cejas (android10.org)

Charla de acceso a datos por Fernando Cejas (android10.org)

Statistics

Views

Total Views
19,912
Views on SlideShare
19,825
Embed Views
87

Actions

Likes
2
Downloads
483
Comments
2

2 Embeds 87

http://catdroid.org 81
http://www.linkedin.com 6

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Buenas Adri!!..Perdón por contestar tarde. Primero que todo muchas gracias, espero que te haya servido la presentación, y la cuestión es animarse, de a poco, hacé las cosas por prioridad de a poquito, por ejemplo, en tu caso empezaría intentando localizar cuando empieza una llamada...una vez hecho eso, ya irás aprendiendo y calculando tiempos. La idea me gusta, a ver si vemos una buena app pronto!!..Saludos
    Are you sure you want to
    Your message goes here
    Processing…
  • Hola, Fernando. Te comento, estoy intentando aprender a programar apps para Android, y quería saber si tienes o conoces algún manual para empezar... Mi objetivo por ahora es hacer una app para calcular los minutos de llamadas realizadas desde un terminal, pero no sé ni por donde empezar... He visto lo de los ContentProvider, que ya es algo, ahora solo falta empezar a escribir código, a ver qué tal va...

    Un saludo, y enhorabuena por el manual, está muy bien.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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

Desarrollo android    almacenamiento de datos Desarrollo android almacenamiento de datos Presentation Transcript

  • Fernando Cejas Acceso a datos en Android
  • Índice
    • Preferences
    • Local Files
    • Databases
    • Content Providers
    Acceso a datos en Android
  • Almacenamiento de datos
    • En aplicaciones típicas de escritorio, el sistema operativo ofrece el sistema de ficheros para compartir datos entre aplicaciones
    • En Android, los ficheros son privados por aplicación
    • Para compartir información, se utilizan los Content Providers
    Acceso a datos en Android
  • Almacenamiento de datos: Preferences
    • Técnica ágil para guardar datos simples de la aplicación
    • Los datos se almacenan en pares key/value
    • Usado típicamente para guardar las preferencias de la aplicación (fuentes, colores..)
    • Permite guardar datos primitivos (Boolean, float...)
    • Esta información persiste aunque la aplicación muera.
    • Actividades tienen los métodos onSaveInstance() o onStop() para guardar los datos antes de acabar
    • Se invoca el método getSharedPreferences (File) si tenemos varios ficheros o getPreferences() para un sólo fichero .
    Acceso a datos en Android
  • 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
    • Ejemplo del workspace :
    • Preferences-PersistentState: en este ejemplo se muestra cómo persistir la información utilizando las Preferences La Activity principal muestra dos campos de texto editable. Cuando se modifican los valores de estos campos y se pulsa el botón de volver en dispositivo, al regresar a la Activity se puede ver cómo en el segundo campo se ha perdido la información. Esto es debido a que la Activity ha restaurado la información de ese campo en el método onResume() , llamado al restaurar la instancia.
    Ejemplos y ejercicios Acceso a datos en Android
  • Almacenamiento de datos: ficheros locales
    • Por defecto, sólo la aplicación puede acceder a esos ficheros (permisos Unix)
    • Acceso similar a Java estándar, se deben crear inputs y outpus streams
    • Sólo se soportan archivos creados en la misma carpeta que la aplicación
    • Las aplicaciones van a la ruta: /data/app (gratuitas) y /data/app-private (de pago), las nuevas versiones soportan almacenamiento en la SDCard
    String FILE_NAME = "tempfile.tmp" ; // Create a new output file stream that’s private to this application. FileOutputStream fos = openFileOutput(FILE_NAME, Context .MODE_PRIVATE); // Create a new file input stream. FileInputStream fis = openFileInput(FILE_NAME); Acceso a datos en Android
    • Ejemplo del workspace :
    • Storage-File: en este ejemplo se muestra cómo utilizar Files para almacenar y listar la información de ficheros La Activity principal cómo interactuar con los métodos de la clase File y el sistema de ficheros de Android (ruta local, ruta de caché…)
    • Storage-SDCard: en este ejemplo se muestra cómo utilizar almacenamiento externo (SDCard) verificando previamente permisos para acceder y escribir. La Activity principal verifica que el almacenamiento externo ha sido montado y que se dispone de permisos de escritura en éste.
    Ejemplos y ejercicios Acceso a datos en Android
  • Almacenamiento de datos: SQLite
    • Cada base de datos es privada para la aplicación, pero pueden acceder todas las clases de ésta.
    • Las bases de datos se almacenan en la carpeta /data/data/ nombre_package /databases
    • Para compartir la información utilizar ContentProviders
    • Permite gestionar upgrades de las bases de datos (realizar Alter Tables cuando se necesite)
    Acceso a datos en Android
  • Almacenamiento de datos: SQLite (II)
    • Base de datos Open Source
    • Cumplimenación de estándares de BDs
    • Ligera, no requiere excesivos recursos
    • Las querys (consultas) se devuelven como objetos Cursor, apuntando a la información
    • Utilizada en reproductores MP3, iPhone y iPods
    • Para información detallada: http://www.sqlite.org
    Acceso a datos en Android
  • Almacenamiento de datos: SQLite Cursors
    • Estructura para recorrer y procesar consultas
    • Funciones principales para navegar en los resultados de una query:
      • moveToFirst: mueve el cursor a la primera fila de los registros
      • moveToNext: mueve el cursor a la siguiente fila de los registros
      • moveToPrevious: mueve el cursor a la fila anterior de los registros
      • getCount: devuelve el número de registros de la query
      • getColumnIndexOrThrow: devuelve un índice para la columna dada
      • getColumnName: dado un índice, devuelve el nombre de esa columna
      • getColumnNames: devuelve un array con los nombres de las columnas
      • moveToPosition: mueve el cursor al registro que hay en esa posición
      • getPosition: devuelve la posición actual del cursor
    Acceso a datos en Android
    • Ejemplo del workspace :
    • SQL-Access: en este ejemplo se muestra cómo interactuar con una base de datos local de una aplicación Android.
    • Después de ejecutar el ejemplo, se puede comprobar lo siguiente:
    • La base de datos ha sido creada en el siguiente directorio: /data/data/com.slashmobility.curso.android/databases
    • Para comprobarlo, se puede ejecutar: adb –s emulator-5554 shell , con el que entraremos con el Root
    • Ejecutar > sqlite3 /data/data/com.slashmobility.curso.android/databases/midatabase para abrir la BD del ejemplo. En este modo se pueden ejecutar sentencias SQL.
    • Ejecutar > SELECT * from dictionary ;
    • SQL-Demo: en este ejemplo se muestra cómo utilizar las BDs con Android añadiendo complejidad de diseño Al crear la Activity principal, se crea una tabla con una estructura determinada, en este caso una tabla simple con un ID y una campo de tipo Text. defecto (this.dh.insert()). Se realiza un borrado de datos que puedan existir en la base de datos. Posteriormente se muestra cómo insertar valores en la tabla. Al finalizar, se recuperan todos los valores insertados en la tabla (this.dh.selectAll()) y se muestran por pantalla.
    Ejemplos y ejercicios Acceso a datos en Android
  • 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
  • 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
  • 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
  • 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
  • Almacenamiento de datos: Content Providers Acceso a datos en Android
    • Único mecanismo para compartir datos entre aplicaciones.
      • En android no hay área de datos comunes.
      • Permite desacoplar la capa de aplicación de la capa de datos (data-source agnostic)
    • Heredar de ContentProvider e implementar una interfaz para consultar y/o modificar los datos.
    • Nunca se trata con el ContentProvider siempre con el ContentResolver.
    • Accesible utilizando una simple URI.
    • Recorrer los datos a través de un Cursor.
  • Almacenamiento de datos: ContentProviders Acceso a datos en Android
    • Browser : permite leer o modificar bookmarks, historial del navegador o búsquedas web.
    • CallLog : permite ver o modificar el historial de llamadas (entrantes o salientes).
    • Contacts : Recupera, modifica, o almacena detalles de contactos.
    • MediaStore : acceso a los recursos multimedia del dispositivo (audio, video...)
    • Settings : acceso a las preferencias del dispositivo.
  • Almacenamiento de datos: ContentResolver Acceso a datos en Android
  • Almacenamiento de datos:Acceso ContentProvider Acceso a datos en Android
  • Almacenamiento de datos:URI ContentProvider Acceso a datos en Android
  • Almacenamiento de datos: Consultas ContentProvider Acceso a datos en Android
  • Almacenamiento de datos: Consultas Detalle ContentProvider Acceso a datos en Android
  • Almacenamiento de datos: Ejemplos y ejercicios Acceso a datos en Android
    • Ejemplo del workspace :
    • ContentProvider Call Log: en este ejemplo se muestra cómo interactuar con el ContentProvider de registro de llamadas. Se muestra en un listview la duración de las últimas llamadas.
    • ContentProvider Contacts: en este ejemplo se muestra cómo interactuar con el ContentProvider de contactos. Se muestra en un listview los contactos. Ver en el manifiest el permiso correspondiente para leer de la agenda de contactos. Permisos correspondientes.
    • ContentProvider Creating Contacts: en este ejemplo se muestra cómo interactuar con el ContentProvider de contactos. Se muestra como crear un contacto en la agenda junto con su compañia.
  • Acceso a datos en Android Si no hay, vamos con el sorteo de la camiseta Preguntas???
  • Acceso a datos en Android Fernando Cejas [email_address] [email_address] @fernando_cejas http://www.android10.org/ MUCHAS GRACIAS!!!