Tutorials d'Android per a principiants Part 4: proveïdor de contingut



Aquest tutorial d'Android tracta els conceptes del proveïdor de contingut. És un element bàsic important d'Android, que facilita l'intercanvi de dades en el sistema Android.

En els nostres anteriors tutorials d'Android per a principiants, vam parlar dels tres primers blocs d'Android: Activitat , Intenció i Serveis . Aquest article és el quart d’aquesta sèrie de tutorials d’Android per a principiants i tracta del proveïdor de contingut, que és un altre component molt important del sistema Android.

Content Provider és l'intermediari del vostre sistema Android, que facilita l'intercanvi de dades entre diferents aplicacions d'Android. Aprofundim en els detalls d'aquest tutorial d'Android.





Tutorial d'Android per a principiants-4: Baixeu-vos el codi del proveïdor de contingut aquí . Voleu aquest codi un cop hàgiu passat el tutorial! :)

[dl url = ”#” class = ”eModal eModal-6 ″ title =” Codi de descàrrega ”desc =” ”type =” ”align =” ”for =” download ”]



Tutorials d'Android: proveïdor de contingut

El Proveïdor de contingut facilita l’accés a un magatzem o magatzem de dades central per permetre l’ús compartit de dades i la manipulació de dades entre diferents aplicacions.

A continuació, es mostren alguns exemples de proveïdors de contingut predeterminats a l'API del sistema Android:

Tutorials d



Aquests proveïdors de contingut permeten l'abstracció de l'usuari d'una base de dades subjacent. Generalment, els proveïdors de contingut utilitzen SQLite per emmagatzemar la base de dades subjacent.

Prenguem l'exemple sempre útil de la bona aplicació antiga de Facebook, que també ens ha ajudat a simplificar les coses als anteriors tutorials d'Android.

En algun moment de la vostra vida en xarxa social, tots heu penjat una foto a la vostra cronologia de Facebook, oi! Com ho fas?

En fer clic al botó Foto de la paret, accedireu a la galeria de fotos. Des d'allà podeu triar una foto per penjar-la.

Després d'haver llegit els articles anteriors de Sèries de tutorials d'Android , ja sabeu sobre activitats i intents, per tant, sabeu que això és el que passa:

El vostre mur de Facebook és una 'ACTIVITAT'. En fer clic al botó Foto, es passa un 'INTENT' que transmet el missatge i s'obre el 'PROVEVDOR DE CONTINGUTS' (Galeria de fotos). La foto es penja mitjançant un 'SERVEI' de càrrega a la xarxa.

Mireu aquest vídeo en directe per saber com funciona el proveïdor de contingut a la vostra aplicació de Facebook.

longitud javascript d'una matriu

Per què el sistema Android necessita proveïdors de contingut?

La necessitat de proveïdors de contingut sorgeix perquè la base de dades creada en una aplicació no és visible per a una segona aplicació.

És senzill crear i emmagatzemar bases de dades en diferents aplicacions mitjançant SQLite, però el problema és aquest, una base de dades d'Android és privada per a l'aplicació que la crea . No hi ha cap àrea d’emmagatzematge comuna a Android a la qual totes les aplicacions poden accedir. Per tant, perquè diferents aplicacions utilitzin una base de dades, el sistema Android necessita una interfície que permeti l’intercanvi de dades entre aplicacions i processos. Aquí és on juga el proveïdor de contingut.

Realment necessito un proveïdor de contingut?

1) Vostè no necessiteu desenvolupar el vostre propi proveïdor si voleu una base de dades privada per a una aplicació concreta (aquesta base de dades no seria accessible per a aplicacions diferents de la que la va crear).

2) Vostè però necessiteu un proveïdor personalitzat per proporcionar suggeriments de cerca personalitzats al vostre propi sistema d'aplicacions.

3) També necessitareu un proveïdor de contingut per copiar i enganxar dades complexes de la vostra aplicació a altres aplicacions.

Quines són les operacions admeses per un proveïdor de contingut?

Els proveïdors de contingut admeten les operacions bàsiques següents:

1) Consulta: Consulta el proveïdor de contingut per a tots els objectes en funció de l’URI especificat.

2) Suprimeix: Suprimeix els objectes especificats de la base de dades d'un proveïdor de contingut.

3) Actualització: Actualitza els objectes de la base de dades.

4) Insereix: Insereix un objecte nou a la base de dades.

Passos per dur a terme una operació al Proveïdor de contingut

Pas 1: accedir a un proveïdor de contingut

Objecte client ContentResolver s’utilitza per accedir a dades del proveïdor de contingut. Es comunica amb l'objecte del proveïdor, que al seu torn accepta la sol·licitud d'accés a les dades i retorna els resultats desitjats. La interfície d'intercanvi de dades proporcionada pel proveïdor i l'objecte client del proveïdor permet la comunicació entre diferents processos / aplicacions.

L'aplicació que necessita accedir a la base de dades ha de declarar-ho i sol·licitar permisos al fitxer manifest. Això es discutiria detalladament en els nostres següents tutorials d'Android.

URI de contingut

L’URI de contingut és un dels arguments que s’utilitzen per identificar les dades d’un proveïdor. Té quatre parts:

1) Esquema: L'esquema del proveïdor de contingut té un valor constant: 'contingut'.

2) Autoritat: És el nom simbòlic del proveïdor i és únic per a cadascun. Així distingim el proveïdor de contingut desitjat d’una llista de tants.

3) Camí: Camí ajuda a distingir les dades necessàries de la base de dades completa . Per exemple, el proveïdor de contingut del registre de trucades diferencia les trucades perdudes, les trucades rebudes, etc. mitjançant diferents camins.

4) Identificació: No és un component obligatori i és possible que no estigui present a l'URI, però, si és present, hauria de ser numèric. Per exemple, si voleu accedir a un fitxer de música específic des del vostre proveïdor de contingut multimèdia, també especifiqueu una identificació .

El procés de

Utilitzant l'autorització del proveïdor, ContentResolver identifica el proveïdor de contingut correcte (ja que l'autorització és única per a cada proveïdor de contingut). Un cop fet això, el component de ruta de l'URI s'utilitza per seleccionar la taula de dades correcta (sol·licitada). En cas que hi hagi una identificació, el proveïdor sabria quines dades exactes se sol·liciten.

Els URI són de dos tipus:

A més, els URI també poden tenir informació limitant.

Pas 2: Com recuperar dades d'un proveïdor de contingut

Tot i que ContentResolver té accés a la taula de dades ara, no pot recuperar les dades necessàries tret que l’aplicació tingui 'Permís d'accés de lectura' per a aquest proveïdor en particular. Aquest permís es defineix al fitxer de manifest de cada proveïdor de contingut.

Tot això com una aplicació (que vulgui accedir a aquesta base de dades) ha de sol·licitar aquest permís.

Ara, com es va comentar anteriorment en aquest tutorial d'Android, es poden dur a terme quatre operacions mitjançant un proveïdor de contingut . Repassarem cadascun per un.

CONSULTES

Ara heu accedit al proveïdor i teniu permís per recuperar-ne dades. El següent pas és fer-ho construïu la consulta per sol·licitar l'acció necessària al proveïdor .

Aquests són els arguments utilitzats durant la consulta:

1) ODI : Funciona exactament com s'ha explicat anteriorment.

2) Projecció: La consulta hauria de fer-ho retorna un conjunt de columnes de tota la taula de base de dades . Això es coneix com a projecció. Si es passa per nul·la, es tornaran totes les columnes, cosa que és ineficient.

3) Clàusula de selecció: A filtre que declara les files a retornar , formatat com una clàusula SQL WHERE (excloent el propi WHERE). Si es passa per nul, es tornaran totes les files de l'URI indicat.

Per exemple, si introduïu un alfabet (per exemple, 'P') a la columna de cerca de la vostra llibreta d'adreces, retornarà totes les dades de contacte començant per 'P'. Tot i això, si no introduïu res a la barra de cerca, es recuperarà la llista completa de contactes (la clàusula de selecció s'estableix en 'nul·la' en aquests casos).

4) Argument de selecció: Podeu incloure '? S' a la selecció, que se substituirà pels valors de selectionArgs, en l'ordre en què apareixen a la selecció.

5) Ordre de classificació: Clàusula SQL ORDER BY (excloent la mateixa ORDER BY). Si es passa a nul, s’obtindran els resultats que poden no estar ordenats.

EXEMPLE DE CODI per a la consulta:

  • Cerca de números de telèfon a Contactes
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) Nom de la cadena = cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)) (cursor.getString (cursor .getColumnIndex (ContactsContract.Contacts.HAS_PHONE_NUMBER))) si (numCount> 0) {Cursor phoneCursor = contentresolver.query (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.? ' , nova cadena [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Name:' + name + ', Número de telèfon:' + phoneNo + ''} phoneCursor.close ()}}}

INSERCIÓ

Suposem que voleu inserir nous contactes a la vostra llibreta d'adreces. Objecte ContentValues s'utilitza per fer aquestes insercions. Les claus de l'objecte ContentValue i les columnes del proveïdor de contingut han de coincidir per aconseguir-ho. A continuació, en teniu un exemple:

EXEMPLE DE CODI PER A la inserció:

  • L'operació consisteix a inserir una entrada nova amb el nom 'Rajnikant' i el número '9988999888'
// Operació ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContact). ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TamePE). ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (99). , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ACTUALITZACIÓ

Per actualitzar un proveïdor de contingut, s’utilitzen els arguments següents:

1) ODI: L'URI del proveïdor de contingut

2) ContentValues: Conté els valors que substituirien les dades existents.

3) Clàusula de selecció: Això us pot ajudar a seleccionar els registres específics que vulgueu actualitzar

4) Argument de selecció: Podeu incloure '? S' a la selecció, que se substituirà pels valors de selectionArgs, en l'ordre en què apareixen a la selecció.

Una vegada més, el fitxer les claus de l'objecte ContentValues ​​han de coincidir amb les columnes del proveïdor de contingut en cas contrari, l'actualització no es produiria.

EXEMPLE DE CODI PER A L'actualització:

  • S'està actualitzant el número de telèfon on es diu 'Rajnikant'
Cadena where = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (where, params) .withValue (ContactsContract.CommonD. Phone.NUMBER, '9876543210') .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

ESBORRIMENT

La supressió utilitza els mateixos arguments que actualitzar amb l'excepció de l'argument ContentValues, que no és obligatori, ja que no hi haurà cap valor substituït.

EXEMPLE DE CODI PER A LA supressió:

  • Suprimiu el contacte on el nom és 'Rajnikant'
Cadena where = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (where, params) .build ()) getContentResolver ) .applyBatch (ContactsContract.AUTHORITY, ops)

En cas d'operació d'inserció, l'URI ha de basar-se en el directori. En la resta de casos, els URI es poden basar en identificadors o en directoris.

Esperem Tutorial d'Android per a principiants: Part 5 no era massa difícil d’entendre! Tractarem més informació sobre els proveïdors de contingut als següents tutorials d'Android. Gaudeix aprenent els conceptes bàsics fins llavors.

ordenar algoritmes c ++

Té algun dubte en aquest tutorial d'Android? Pregunta'ns.

Feliç aprenentatge!

Es van utilitzar els recursos següents per crear aquest tutorial d'Android. Desenvolupadors oficials d'Android , Edureka.in

També us poden agradar aquestes publicacions relacionades: