Tutoriels Android pour les débutants, partie 4: fournisseur de contenu

Ce didacticiel Android présente les concepts du fournisseur de contenu. C'est un élément important d'Android, facilitant l'échange de données dans le système Android.

Dans nos précédents tutoriels Android pour les débutants, nous avons discuté des trois premiers blocs de construction d'Android: Activité , Intention et Prestations de service . Cet article est le quatrième de cette série de didacticiels Android pour les débutants et traite du fournisseur de contenu, qui est un autre composant très important du système Android.



Le fournisseur de contenu est l’intermédiaire de votre système Android, facilitant l’échange de données entre différentes applications Android. Laissez-nous entrer un peu dans les détails à ce sujet dans ce tutoriel Android.



Tutoriel Android pour les débutants-4 Bonus: Téléchargez le code du fournisseur de contenu ici . Vous voudriez ce code une fois que vous avez parcouru le didacticiel! :)

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



Tutoriels Android: fournisseur de contenu

Content Provider facilite l'accès à un magasin de données central ou à un entrepôt pour permettre le partage de données et la manipulation de données entre différentes applications.

Voici quelques exemples de fournisseurs de contenu par défaut dans l'API du système Android:

Tutoriels Android: fournisseurs de contenu par défaut dans le système Android



Ces fournisseurs de contenu permettent l'abstraction de l'utilisateur à partir d'une base de données sous-jacente. En règle générale, les fournisseurs de contenu utilisent SQLite pour stocker la base de données sous-jacente.

Prenons l'exemple toujours utile de la bonne vieille application Facebook, qui nous a également aidés à simplifier les choses dans les précédents tutoriels Android!

Vous avez tous, à un moment de votre vie de réseautage social, téléchargé une photo sur votre chronologie Facebook, d'accord! Comment faites-vous?

En cliquant sur le bouton Photo sur le mur, vous accédez à la galerie de photos. De là, vous pouvez choisir une photo à télécharger.

Après avoir lu les articles précédents de Série de tutoriels Android , vous connaissez les activités et les intentions, vous savez donc que c'est ce qui se passe:

Votre mur Facebook est une «ACTIVITÉ». Lorsque vous cliquez sur le bouton Photo, un «INTENTION» est passé, qui transmet le message et le «FOURNISSEUR DE CONTENU» (Galerie de photos) s'ouvre. La photo est téléchargée à l'aide d'un 'SERVICE' de téléchargement réseau.

Regardez cette vidéo en direct pour savoir comment le fournisseur de contenu fonctionne dans votre application Facebook.

Pourquoi le système Android a-t-il besoin de fournisseurs de contenu?

Le besoin de fournisseurs de contenu est dû au fait que la base de données créée dans une application n'est pas visible pour une deuxième application.

Il est simple de créer et de stocker une base de données dans différentes applications à l'aide de SQLite, mais le problème est le suivant, une base de données sous Android est privée pour l'application qui la crée . Il n'y a pas de zone de stockage commune dans Android à laquelle chaque application peut accéder. Par conséquent, pour que différentes applications utilisent une base de données, le système Android a besoin d'une interface qui permet un tel échange de données inter-applications et inter-processus. C'est là que le fournisseur de contenu intervient.

Ai-je vraiment besoin d'un fournisseur de contenu?

1) Vous vous n'avez pas besoin de développer votre propre fournisseur si vous voulez une base de données privée pour une application particulière (cette base de données ne serait pas accessible aux applications autres que celle qui l'a créée).

2) Vous cependant besoin d'un fournisseur personnalisé pour fournir des suggestions de recherche personnalisées dans votre propre système d'application.

3) Vous auriez également besoin d'un fournisseur de contenu pour copier et coller des données complexes de votre application vers d'autres applications.

Quelles sont les opérations prises en charge par un fournisseur de contenu?

Les fournisseurs de contenu prennent en charge les opérations de base suivantes:

un) Requête: Interroge le fournisseur de contenu pour tous les objets, en fonction de l'URI spécifié.

2) Effacer: Supprime les objets spécifiés de la base de données d'un fournisseur de contenu.

3) Mise à jour: Met à jour les objets de la base de données.

4) Insérer: Insère un nouvel objet dans la base de données.

Étapes pour effectuer une opération dans Content Provider

Étape 1: Accéder à un fournisseur de contenu

Objet client ContentResolver est utilisé pour accéder aux données du fournisseur de contenu. Il communique avec l'objet fournisseur, qui à son tour accepte la demande d'accès aux données et renvoie les résultats souhaités. L'interface d'échange de données fournie par le fournisseur et l'objet client fournisseur permet la communication entre différents processus / applications.

L'application qui a besoin d'accéder à la base de données doit le déclarer et demander des autorisations dans son fichier manifeste. Cela sera discuté en détail dans nos prochains tutoriels Android.

URI du contenu

L'URI de contenu est l'un des arguments utilisés pour identifier les données dans un fournisseur. Il comporte quatre parties:

un) Schème: Le schéma du fournisseur de contenu a une valeur constante: «contenu».

2) Autorité: Il s'agit du nom symbolique du fournisseur et est unique pour chacun. C'est ainsi que nous distinguons le fournisseur de contenu souhaité dans une liste de tant de personnes.

3) Chemin: Chemin permet de distinguer les données requises de la base de données complète . Par exemple, le fournisseur de contenu du journal des appels fait la distinction entre les appels manqués, les appels reçus, etc. en utilisant différents chemins.

4) ID: Ce n'est pas un composant obligatoire et peut ne pas être présent dans l'URI, mais s'il est présent, il doit être numérique. Par exemple, si vous souhaitez accéder à un fichier musical spécifique à partir de votre fournisseur de contenu multimédia, vous devez également spécifier un identifiant .

Le processus

À l'aide de l'autorité du fournisseur, ContentResolver identifie le fournisseur de contenu approprié (car l'autorité est unique pour chaque fournisseur de contenu). Cela fait, le composant de chemin de l'URI est utilisé pour sélectionner la table de données correcte (demandée). Dans le cas où un identifiant est présent, le fournisseur saurait quelles données exactes sont demandées.

Les URI sont de deux types:

De plus, les URI peuvent également avoir des informations limitatives.

Étape 2: Comment récupérer des données auprès d'un fournisseur de contenu

Même si ContentResolver a désormais accès à la table de données, il ne peut pas récupérer les données requises sauf si l'application a 'Autorisation d'accès en lecture' pour ce fournisseur particulier. Cette autorisation est définie dans le fichier manifeste de chaque fournisseur de contenu.

Tout ça une application (qui veut accéder à cette base de données) doit faire est de demander cette autorisation.

Maintenant, comme indiqué précédemment dans ce didacticiel Android, quatre opérations peuvent être effectuées à l'aide d'un fournisseur de contenu . Nous passerons en revue chacun par un.

DEMANDE

Maintenant, vous avez accédé au fournisseur et êtes autorisé à en récupérer les données. La prochaine étape consiste à construire la requête pour demander l'action requise au fournisseur .

Voici les arguments utilisés lors de la requête:

un) HAINE : Cela fonctionne exactement comme expliqué ci-dessus.

2) Projection: La requête doit renvoie un ensemble de colonnes à partir de la table de base de données entière . C'est ce qu'on appelle la projection. Passer null retournera toutes les colonnes, ce qui est inefficace.

3) Clause de sélection: À filtre déclarant les lignes à renvoyer , formaté comme une clause SQL WHERE (à l'exclusion du WHERE lui-même). Passer null retournera toutes les lignes pour l'URI donné.

Par exemple, si vous saisissez un alphabet (par exemple «P») dans la colonne de recherche de votre carnet d’adresses, il renverra toutes les coordonnées commençant par «P». Cependant, si vous n'entrez rien dans la barre de recherche, la liste complète des contacts est récupérée (la clause de sélection est définie sur «null» dans ce cas).

4) Argument de sélection: Vous pouvez inclure des «? S» dans la sélection, qui seront remplacés par les valeurs de selectionArgs, dans l'ordre dans lequel elles apparaissent dans la sélection.

5) Ordre de tri: Clause SQL ORDER BY (à l'exclusion de ORDER BY lui-même). Passer null récupérera les résultats qui peuvent ne pas être ordonnés.

EXEMPLE DE CODE pour l'interrogation:

  • Recherche de numéros de téléphone dans les contacts
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 + = 'Nom:' + nom + ', No de téléphone:' + phoneNo + ''} phoneCursor.close ()}}}

INSERTION

Supposons que vous souhaitiez insérer de nouveaux contacts dans votre carnet d'adresses. Objet ContentValues est utilisé pour faire ces insertions. Les clés d'objet ContentValue et les colonnes du fournisseur de contenu doivent correspondre pour y parvenir. Voici un exemple pour cela:

différence entre c c # et c ++

EXEMPLE DE CODE POUR L'insertion:

  • L'opération consiste à insérer une nouvelle entrée avec le nom «Rajnikant» et le numéro «9988999888»
// Opération ArrayList ops = new ArrayList () int rawContactInsertIndex = ops.size () ops.add (ContentProviderOperation.newInsert (RawContacts.CONTENT_URI) .withValue (RawContacts.ACCOUNT_TYPE, null) .withValue (RawContacts. ()) ops.add (ContentProviderOperation .newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue. ) ops.add (ContentProviderOperation.newInsert (Data.CONTENT_URI) .withValueBackReference (Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue (Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE ') .withValue' (Phone.NUMBERValue) , Phone.TYPE_MOBILE) .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

MISE À JOUR

Pour mettre à jour un fournisseur de contenu, les arguments suivants sont utilisés:

un) HAINE: L'URI du fournisseur de contenu

2) ContentValues: Celui-ci contient les valeurs qui remplaceraient les données existantes.

3) Clause de sélection: Cela peut aider à sélectionner les enregistrements spécifiques à mettre à jour

4) Argument de sélection: Vous pouvez inclure des «? S» dans la sélection, qui seront remplacés par les valeurs de selectionArgs, dans l'ordre dans lequel elles apparaissent dans la sélection.

Encore une fois, le les clés de l'objet ContentValues ​​doivent correspondre aux colonnes du fournisseur de contenu sinon, la mise à jour ne se produirait pas.

EXEMPLE DE CODE POUR LA MISE À JOUR:

  • Mise à jour du numéro de téléphone dont le nom est «Rajnikant»
Chaîne où = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newUpdate (ContactsContract.Data.CONTENT_URI) .withSelection (où, params) .withValue (ContactsContract.CommonDataKinds. Phone.NUMBER, '9876543210') .build ()) getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, ops)

EFFACEMENT

La suppression utilise les mêmes arguments que update à l'exception de l'argument ContentValues, qui n'est pas obligatoire car il n'y aura pas de valeurs substituées.

EXEMPLE DE CODE POUR LA SUPPRESSION:

  • Supprimer le contact dont le nom est 'Rajnikant'
Chaîne où = ContactsContract.Data.DISPLAY_NAME + '=? 'String [] params = new String [] {“Rajnikant”} ArrayList ops = new ArrayList () ops.add (ContentProviderOperation.newDelete (ContactsContract.RawContacts.CONTENT_URI) .withSelection (où, params) .build ()) getContentResolver ( ) .applyBatch (ContactsContract.AUTHORITY, ops)

En cas d'opération d'insertion, l'URI doit être basé sur un répertoire. Dans tous les autres cas, les URI peuvent être basés sur un ID ou sur un répertoire.

Nous esperons Tutoriel Android pour les débutants: Partie 5 n’était pas trop difficile à comprendre! Nous discuterons plus en détail des fournisseurs de contenu dans les didacticiels Android suivants. Profitez de l'apprentissage des bases jusque-là!

Avez-vous des doutes sur ce tutoriel Android? Demandez nous.

Bon apprentissage!

Les ressources suivantes ont été utilisées pour créer ce didacticiel Android! Développeurs Android officiels , Edureka.in

Vous pourriez également aimer ces articles connexes: