Tutoriales de Android para principiantes, parte 4: proveedor de contenido



Este tutorial de Android analiza los conceptos del proveedor de contenido. Es un componente importante de Android, que facilita el intercambio de datos en el sistema Android.

En nuestros tutoriales de Android anteriores para principiantes, discutimos los primeros tres bloques de construcción de Android: Actividad , Intención y Servicios . Este artículo es el cuarto de esta serie de tutoriales de Android para principiantes y analiza el proveedor de contenido, que es otro componente muy importante del sistema Android.

Content Provider es el intermediario de su sistema Android, lo que facilita el intercambio de datos entre diferentes aplicaciones de Android. Entremos un poco en los detalles de eso en este tutorial de Android.





Tutorial de Android para principiantes-4 Bonus: Descargue el código del proveedor de contenido aquí . ¡Querrá este código una vez que haya seguido el tutorial! :)

[dl url = ”#” class = ”eModal eModal-6 ″ title =” Código de descarga ”desc =” ”type =” ”align =” ”for =” download ”]



Tutoriales de Android: proveedor de contenido

Content Provider facilita el acceso a un almacén o almacén de datos central para permitir el intercambio de datos y la manipulación de datos en diferentes aplicaciones.

A continuación, se muestran algunos ejemplos de proveedores de contenido predeterminados en la API del sistema Android:

Tutoriales de Android: proveedores de contenido predeterminados en el sistema Android



Estos proveedores de contenido permiten al usuario la abstracción de una base de datos subyacente. Generalmente, los proveedores de contenido usan SQLite para almacenar la base de datos subyacente.

¡Tomemos el ejemplo siempre útil de la buena y antigua aplicación de Facebook, que también nos ha ayudado a simplificar las cosas en los Tutoriales de Android anteriores!

Todos ustedes, en algún momento de su vida en las redes sociales, han subido una foto a su línea de tiempo de Facebook, ¡correcto! ¿Cómo lo haces?

Al hacer clic en el botón Foto en la pared, se accede a la galería de fotos. Desde allí, puede elegir una foto para cargar.

Habiendo leído los artículos anteriores de Serie de tutoriales de Android , conoces Actividades e Intenciones, por lo tanto, sabes que esto es lo que sucede:

Tu muro de Facebook es una 'ACTIVIDAD'. Al hacer clic en el botón Foto, se pasa un 'INTENTO', que transmite el mensaje y se abre el 'PROVEEDOR DE CONTENIDO' (Galería de fotos). La foto se carga mediante una carga de red 'SERVICIO'.

Mire este video en vivo para saber cómo funciona el proveedor de contenido dentro de su aplicación de Facebook.

¿Por qué el sistema Android necesita proveedores de contenido?

La necesidad de proveedores de contenido surge porque la base de datos creada en una aplicación no es visible para una segunda aplicación.

Es simple crear y almacenar bases de datos en diferentes aplicaciones usando SQLite, sin embargo, el problema es este, una base de datos en Android es privada para la aplicación que la crea . No existe un área de almacenamiento común en Android a la que puedan acceder todas las aplicaciones. Por lo tanto, para que diferentes aplicaciones utilicen una base de datos, el sistema Android necesita una interfaz que permita dicho intercambio de datos entre aplicaciones y entre procesos. Aquí es donde entra en juego el proveedor de contenido.

¿Realmente necesito un proveedor de contenido?

1) usted no es necesario que desarrolle su propio proveedor si desea una base de datos privada para una aplicación en particular (esta base de datos no sería accesible para aplicaciones distintas de la que la creó).

2) Tu sin embargo necesita un proveedor personalizado para proporcionar sugerencias de búsqueda personalizadas en su propio sistema de aplicación.

3) También necesitaría un proveedor de contenido para copiar y pegar datos complejos de su aplicación a otras aplicaciones.

¿Cuáles son las operaciones que admite un proveedor de contenido?

Los proveedores de contenido admiten las siguientes operaciones básicas:

1) Consultando: Consulta el proveedor de contenido para todos los objetos, según el URI especificado.

2) Eliminar: Elimina los objetos especificados de la base de datos de un proveedor de contenido.

3) Actualizar: Actualiza los objetos de la base de datos.

4) Insertar: Inserta un nuevo objeto en la base de datos.

Pasos para realizar una operación en Content Provider

Paso 1: acceder a un proveedor de contenido

Objeto de cliente ContentResolver se utiliza para acceder a los datos del proveedor de contenido. Se comunica con el objeto proveedor, que a su vez acepta la solicitud de acceso a los datos y devuelve los resultados deseados. La interfaz de intercambio de datos proporcionada por el proveedor y el objeto cliente del proveedor permite la comunicación entre diferentes procesos / aplicaciones.

La aplicación que necesita acceder a la base de datos tiene que declarar esto y solicitar permisos en su archivo de manifiesto. Esto se discutirá en detalle en nuestros tutoriales de Android posteriores.

java como convertir double a int

URI de contenido

El URI de contenido es uno de los argumentos que se utilizan para identificar los datos en un proveedor. Tiene cuatro partes:

1) Esquema: El esquema de proveedor de contenido tiene un valor constante: 'contenido'.

2) Autoridad: Es el nombre simbólico del proveedor y es único para cada uno. Así es como seleccionamos el proveedor de contenido deseado de una lista de tantos.

3) Camino: Camino ayuda a distinguir los datos requeridos de la base de datos completa . Por ejemplo, el proveedor de contenido del registro de llamadas distingue entre llamadas perdidas, llamadas recibidas, etc. utilizando diferentes rutas.

4) CARNÉ DE IDENTIDAD: No es un componente obligatorio y puede que no esté presente en el URI, pero si está presente, debe ser numérico. Por ejemplo, si desea acceder a un archivo de música específico desde su proveedor de contenido multimedia, también debe especificar una identificación .

El proceso

Usando la autoridad del proveedor, ContentResolver identifica el proveedor de contenido correcto (ya que la autoridad es única para cada proveedor de contenido). Una vez hecho esto, el componente de ruta de URI se usa para seleccionar la tabla de datos correcta (solicitada). En caso de que haya una identificación, el proveedor sabrá qué datos exactos se están solicitando.

Los URI son de dos tipos:

Además, los URI también pueden tener información limitante.

Paso 2: Cómo recuperar datos de un proveedor de contenido

Aunque ContentResolver tiene acceso a la tabla de datos ahora, no puede recuperar los datos requeridos a menos que la aplicación haya 'Permiso de acceso de lectura' para ese proveedor en particular. Este permiso se define en el archivo de manifiesto de cada proveedor de contenido.

Todo eso una aplicación (que quiere acceder a esta base de datos) tiene que hacer es solicitar este permiso.

Ahora, como se discutió anteriormente en este tutorial de Android, Se pueden realizar cuatro operaciones utilizando un proveedor de contenido. . Repasaremos cada uno por uno.

CONSULTAS

Ahora, ha accedido al proveedor y tiene permiso para recuperar datos de él. El siguiente paso es construir la consulta para solicitar la acción requerida del proveedor .

Estos son los argumentos utilizados durante la consulta:

1) ODIO : Funciona exactamente como se explicó anteriormente.

2) Proyección: La consulta debe devolver un conjunto de columnas de toda la tabla de la base de datos . Esto se conoce como proyección. Pasar null devolverá todas las columnas, lo cual es ineficiente.

3) Cláusula de selección: A filtro que declara qué filas devolver , formateado como una cláusula WHERE de SQL (excluyendo el propio WHERE). Pasar null devolverá todas las filas para el URI dado.

Por ejemplo, si ingresa un alfabeto (diga 'P') en la columna de búsqueda de su libreta de direcciones, todos los datos de contacto comenzarán con 'P'. Sin embargo, si no ingresa nada en la barra de búsqueda, se recupera la lista completa de contactos (la cláusula de selección se establece en 'nula' en tales casos).

4) Argumento de selección: Puede incluir '? S' en la selección, que serán reemplazados por los valores de selectionArgs, en el orden en que aparecen en la selección.

5) Orden de clasificación: Cláusula SQL ORDER BY (excluyendo el propio ORDER BY). Pasar nulo buscará los resultados que pueden estar desordenados.

EJEMPLO DE CÓDIGO para consultas:

  • Búsqueda de números de teléfono en Contactos
Cursor cursor = contentresolver.query (ContactsContract.Contacts.CONTENT_URI, null, null, null, null) int count = cursor.getCount () if (count> 0) {String contactDetails = '' while (cursor.moveToNext ()) { String columnId = ContactsContract.Contacts._ID int cursorIndex = cursor.getColumnIndex (columnId) String id = cursor.getString (cursorIndex) String name = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) int numCount = Integer.parseInt (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) if (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT 'ID +' , new String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Nombre:' + nombre + ', Phone No:' + phoneNo + ''} phoneCursor.close ()}}}

INSERCIÓN

Supongamos que desea insertar nuevos contactos en su libreta de direcciones. Objeto ContentValues se utiliza para hacer estas inserciones. Las claves del objeto ContentValue y las columnas del proveedor de contenido deben coincidir para lograr esto. Aquí tienes un ejemplo de esto:

EJEMPLO DE CÓDIGO PARA Inserción:

  • La operación consiste en insertar una nueva entrada con el nombre 'Rajnikant' y el número '9988999888'
// Operación ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContacts.ACCOUNT_NAME ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue.Dnik) .Name ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (99.NUMBER.withValue8, ' , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ACTUALIZANDO

Para actualizar un proveedor de contenido se utilizan los siguientes argumentos:

1) ODIO: El URI del proveedor de contenido

2) ContentValues: Contiene los valores que reemplazarían los datos existentes.

3) Cláusula de selección: Esto puede ayudar a seleccionar los registros específicos para actualizar

4) Argumento de selección: Puede incluir '? S' en la selección, que serán reemplazados por los valores de selectionArgs, en el orden en que aparecen en la selección.

Una vez más, el las claves del objeto ContentValues ​​deben coincidir con las columnas del proveedor de contenido de lo contrario, la actualización no se produciría.

EJEMPLO DE CÓDIGO PARA Actualización:

  • Actualización del número de teléfono cuyo nombre es 'Rajnikant'
Cadena donde = ContactosContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (donde, params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER, “9876543210”) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

SUPRESIÓN

La eliminación utiliza los mismos argumentos que la actualización, con la excepción del argumento ContentValues, que no es necesario ya que no habrá valores sustituidos.

EJEMPLO DE CÓDIGO PARA ELIMINACIÓN:

  • Eliminar el contacto cuyo nombre es 'Rajnikant'
Cadena donde = ContactosContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (donde, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)

En el caso de la operación Insertar, el URI debe basarse en un directorio. En todos los demás casos, los URI pueden estar basados ​​en ID o en directorios.

Esperamos Tutorial de Android para principiantes: Parte 5 no fue demasiado difícil de entender. Discutiremos más sobre los proveedores de contenido en los siguientes tutoriales de Android. ¡Disfruta aprendiendo lo básico hasta entonces!

¿Tienes dudas en este tutorial de Android? Preguntanos.

¡Feliz aprendizaje!

¡Se utilizaron los siguientes recursos para crear este tutorial de Android! Desarrolladores oficiales de Android , Edureka.in

También te pueden gustar estas publicaciones relacionadas: