Tutorial Android per principianti Parte 4: fornitore di contenuti

Questo tutorial Android illustra i concetti del provider di contenuti. È un importante elemento costitutivo di Android, che facilita lo scambio di dati nel sistema Android.

Nei nostri precedenti tutorial Android per principianti, abbiamo discusso i primi tre elementi costitutivi di Android: Attività , Intento e Servizi . Questo articolo è il quarto di questa serie di tutorial Android per principianti e discute Content Provider, che è un altro componente molto importante del sistema Android.



Content Provider è l'intermediario del tuo sistema Android, che facilita lo scambio di dati tra diverse applicazioni Android. Entriamo un po 'nei dettagli in questo tutorial Android.



Tutorial Android per principianti-4 Bonus: Scarica il codice del fornitore di contenuti qui . Vorresti questo codice una volta completato il tutorial! :)

[dl url = '#' class = 'eModal eModal-6 ″ title =' Download Code 'desc =' 'type =' 'align =' 'for =' download ']



Tutorial Android: fornitore di contenuti

Content Provider facilita l'accesso a un archivio dati centrale o un magazzino per consentire la condivisione e la manipolazione dei dati tra diverse applicazioni.

Di seguito sono riportati alcuni esempi di provider di contenuti predefiniti nell'API del sistema Android:

Tutorial Android: provider di contenuti predefiniti nel sistema Android



Questi fornitori di contenuti consentono all'utente l'astrazione da un database sottostante. In genere, i provider di contenuti utilizzano SQLite per archiviare il database sottostante.

Prendiamo l'esempio sempre utile della buona vecchia applicazione Facebook, che ci ha aiutato a semplificare le cose anche nei precedenti tutorial Android!

Tutti voi ad un certo punto della vostra vita sui social network, avete caricato una foto sulla vostra timeline di Facebook, giusto! Come si fa?

Facendo clic sul pulsante Foto sul muro, si arriva alla galleria fotografica. Da lì puoi scegliere una foto da caricare.

Dopo aver letto i precedenti articoli di Serie di tutorial Android , conosci Attività e Intenti quindi, sai che questo è ciò che accade:

La tua bacheca di Facebook è una 'ATTIVITÀ'. Quando si fa clic sul pulsante Foto, viene passato un 'INTENTO', che trasmette il messaggio e si apre 'CONTENT PROVIDER' (Galleria fotografica). La foto viene caricata utilizzando un caricamento in rete 'SERVIZIO'.

Guarda questo video in diretta per sapere come funziona Content Provider all'interno della tua applicazione Facebook.

Perché il sistema Android necessita di provider di contenuti?

La necessità di fornitori di contenuti nasce perché il database creato in un'applicazione non è visibile a una seconda applicazione.

È semplice creare e archiviare database in diverse applicazioni utilizzando SQLite, tuttavia il problema è questo, un database in Android è privato per l'applicazione che lo crea . Non esiste un'area di archiviazione comune in Android a cui ogni applicazione può accedere. Pertanto, affinché applicazioni diverse utilizzino un database, il sistema Android necessita di un'interfaccia che consenta tale scambio di dati tra applicazioni e processi. È qui che entra in gioco il fornitore di contenuti.

Ho davvero bisogno di un fornitore di contenuti?

1) Tu non è necessario sviluppare il proprio provider se si desidera un database privato per una particolare applicazione (questo database non sarebbe accessibile ad applicazioni diverse da quella che lo ha creato).

2) Tu invece è necessario un provider personalizzato per fornire suggerimenti di ricerca personalizzati nel proprio sistema applicativo.

3) Avresti anche bisogno di un fornitore di contenuti per copiare e incollare dati complessi dalla tua applicazione ad altre applicazioni.

Quali sono le operazioni supportate da un fornitore di contenuti?

I fornitori di contenuti supportano le seguenti operazioni di base:

uno) Query: Interroga il provider di contenuti per tutti gli oggetti, in base all'URI specificato.

2) Elimina: Elimina gli oggetti specificati dal database di un provider di contenuti.

3) Aggiornare: Apporta aggiornamenti agli oggetti nel database.

4) Inserire: Inserisce un nuovo oggetto nel database.

Passaggi per eseguire un'operazione in Content Provider

Passaggio 1: accesso a un fornitore di contenuti

Oggetto client ContentResolver viene utilizzato per accedere ai dati da Content Provider. Comunica con l'oggetto provider, che a sua volta accetta la richiesta di accesso ai dati e restituisce i risultati desiderati. L'interfaccia di scambio dati fornita dal provider e l'oggetto client del provider consente la comunicazione tra diversi processi / applicazioni.

L'applicazione che deve accedere al database deve dichiararlo e richiedere le autorizzazioni nel suo file manifest. Questo verrà discusso in dettaglio nei nostri successivi tutorial Android.

URI del contenuto

L'URI del contenuto è uno degli argomenti utilizzati per identificare i dati in un provider. Ha quattro parti:

uno) Schema: Lo schema per il fornitore di contenuti ha un valore costante: 'contenuto'.

come installare php su Windows 7

2) Autorità: È il nome simbolico del provider ed è unico per ciascuno. È così che selezioniamo il fornitore di contenuti desiderato da un elenco di così tanti.

3) Sentiero: Sentiero aiuta a distinguere i dati richiesti dal database completo . Ad esempio, il provider di contenuti del registro chiamate distingue tra chiamate perse, chiamate ricevute ecc. Utilizzando percorsi diversi.

4) ID: Non è un componente obbligatorio e potrebbe non essere presente nell'URI ma, se presente, dovrebbe essere numerico. Per esempio, se desideri accedere a un file musicale specifico dal tuo fornitore di contenuti multimediali, devi specificare anche un ID .

Il processo

Utilizzando l'autorità del provider, ContentResolver identifica il provider di contenuti corretto (poiché l'autorità è unica per ogni provider di contenuti). Fatto ciò, il componente percorso dell'URI viene utilizzato per selezionare la tabella dati corretta (richiesta). Nel caso in cui sia presente un ID, il fornitore saprebbe quali dati esatti vengono richiesti.

Gli URI sono di due tipi:

Inoltre, anche gli URI possono contenere informazioni limitanti.

Passaggio 2: come recuperare i dati da un fornitore di contenuti

Anche se ContentResolver ha ora accesso alla tabella dati, non può recuperare i dati richiesti a meno che l'applicazione non abbia 'Autorizzazione di accesso in lettura' per quel particolare fornitore. Questa autorizzazione è definita nel file manifest di ogni provider di contenuti.

Tutto ciò che è un'applicazione (che vuole accedere a questo database) non deve fare altro che richiedere questa autorizzazione.

Ora, come discusso in precedenza in questo tutorial Android, quattro operazioni possono essere eseguite utilizzando un fornitore di contenuti . Verranno esaminati uno per uno.

INTERROGAZIONE

Ora hai effettuato l'accesso al provider e disponi dell'autorizzazione per recuperare i dati da esso. Il prossimo passo è costruire la query per richiedere l'azione richiesta dal provider .

Ecco gli argomenti usati durante l'interrogazione:

uno) ODIARE : Funziona esattamente come spiegato sopra.

2) Proiezione: La query dovrebbe restituisce una serie di colonne dall'intera tabella del database . Questo è noto come proiezione. Il passaggio di null restituirà tutte le colonne, il che è inefficiente.

3) Clausola di selezione: PER filtro che dichiara quali righe restituire , formattato come una clausola SQL WHERE (escluso WHERE stesso). Il passaggio di null restituirà tutte le righe per l'URI specificato.

Ad esempio, se inserisci un alfabeto (ad esempio 'P') nella colonna di ricerca della tua rubrica, verranno restituiti tutti i dettagli di contatto che iniziano con 'P'. Tuttavia, se non inserisci nulla nella barra di ricerca, viene recuperato l'elenco completo dei contatti (la clausola di selezione è impostata su 'null' in questi casi).

4) Argomento di selezione: È possibile includere '? S' nella selezione, che verrà sostituito dai valori di selectionArgs, nell'ordine in cui vengono visualizzati nella selezione.

5) Ordinamento: Clausola SQL ORDER BY (escluso lo stesso ORDER BY). Il passaggio di null recupererà i risultati che potrebbero non essere ordinati.

ESEMPIO DI CODICE per query:

  • Ricerca di numeri di telefono in Contatti
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 = , new String [] {id}, null) while (phoneCursor.moveToNext ()) {String phoneNo = phoneCursor.getString (phoneCursor .getColumnIndex (ContactsContract.CommonDataKinds. Phone.NUMBER)) contactDetails + = 'Name:' + name + ', Phone No:' + phoneNo + ''} phoneCursor.close ()}}}

INSERIMENTO

Supponiamo che tu voglia inserire nuovi contatti nella tua rubrica. Oggetto ContentValues viene utilizzato per eseguire questi inserimenti. Le chiavi dell'oggetto ContentValue e le colonne del provider di contenuti devono corrispondere per ottenere ciò. Ecco un esempio per questo:

ESEMPIO DI CODICE PER Inserimento:

  • L'operazione consiste nell'inserire una nuova voce con nome 'Rajnikant' e numero '9988999888'
// Operazione ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContacts.ACCOUNT). ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue (StructuredName). ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue (Phone.NUMBER98Value) .withValue (Phone.NUMBER98) , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

IN AGGIORNAMENTO

Per aggiornare un provider di contenuti vengono utilizzati i seguenti argomenti:

uno) ODIARE: L'URI del provider di contenuti

2) ContentValues: Contiene i valori che sostituirebbero i dati esistenti.

3) Clausola di selezione: Questo può aiutare a selezionare i record specifici da aggiornare

4) Argomento di selezione: È possibile includere '? S' nella selezione, che verrà sostituito dai valori di selectionArgs, nell'ordine in cui vengono visualizzati nella selezione.

Ancora una volta, il le chiavi dell'oggetto ContentValues ​​devono corrispondere alle colonne nel provider di contenuti in caso contrario, l'aggiornamento non avverrebbe.

ESEMPIO DI CODICE PER L'aggiornamento:

  • Aggiornamento del numero di telefono il cui nome è 'Rajnikant'
Stringa dove = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (dove, params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER, '9876543210') .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

CANCELLAZIONE

L'eliminazione utilizza gli stessi argomenti dell'aggiornamento con l'eccezione dell'argomento ContentValues, che non è richiesto poiché non ci saranno valori sostituiti.

ESEMPIO DI CODICE PER CANCELLAZIONE:

  • Elimina il contatto il cui nome è 'Rajnikant'
Stringa dove = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {'Rajnikant'} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (dove, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)

In caso di operazione di inserimento, l'URI deve essere basato su directory. In tutti gli altri casi, gli URI possono essere basati su ID o su directory.

Speriamo Tutorial Android per principianti: parte 5 non era troppo difficile da capire! Discuteremo di più sui fornitori di contenuti nei successivi tutorial Android. Divertiti ad imparare le basi fino ad allora!

Hai qualche dubbio in questo tutorial Android? Chiedici.

Buon apprendimento!

Le seguenti risorse sono state utilizzate per creare questo tutorial Android! Sviluppatori Android ufficiali , Edureka.in

Potrebbero piacerti anche questi post correlati: