Quelle est la différence entre ContentProviders et ContentResolver ? Je ne veux pas pour la base de données SQLite
. Je développe une application pour les médias.
J'ai trouvé une explication ici . En résumé
Content Resolver résout un URI en un fournisseur Content spécifique.
Content Provider fournit une interface pour interroger le contenu.
La façon d'interroger un fournisseur de contenu est contentResolverInstance.query(URI,.....)
ContentProviders
sont utilisés pour extraire la base de données d'autres parties et sert d'interface entre votre base de données et l'interface utilisateur/les autres classes. Vous devez créer votre propre ContentProvider pour partager vos données d'application avec d'autres applications.
ContentResolver
est utilisé pour sélectionner le bon fournisseur de contenu basé sur ContentUris
. Un ContentUri peut ressembler à
content: //com.Android.contacts/contacts/3
REMARQUE: Votre propre application peut également utiliser cette route pour gérer ses données.
Voir Fournisseurs de contenu sous Android pour plus de détails
ContentResolver -> ContentProvider -> SQLiteDatabase
La principale différence est la même que celle mentionnée dans d'autres réponses.
ContentProvider expose les données privées de votre application à des applications externes
tandis que
ContentResolver fournit le bon ContentProvider parmi tous les ContentProviders utilisant un URI.
Faisons un détour.
Nous savons tous que lorsque nous créons une base de données SQLite, celle-ci reste privée pour votre application, ce qui signifie que vous ne pouvez simplement pas partager les données de votre application avec une autre application externe.
ContentProvider et ContentResolver font partie du package Android.content
. Ces deux classes fonctionnent ensemble pour fournir un modèle de partage de données robuste et sécurisé entre les applications.
ContentProvider expose les données stockées dans la base de données SQLite à une autre application sans leur indiquer l'implémentation sous-jacente de votre base de données.
Donc, il résume la base de données SQliteDatabase. Mais attendez il y a un piège !!!
L’application externe ne peut pas accéder directement à ContentProvider. Pour cela, vous devez d'abord interagir avec une autre classe appelée ContentResolver Pensez ContentResolver en tant que ContentProvider Finder. Il en existe une seule instance et tous les fournisseurs de contenu de votre appareil sont enregistrés avec un simple URI d'espace de noms. Si vous souhaitez atteindre un fournisseur de contenu donné, il vous suffit de connaître son adresse URI. Passez-le à ContentResolver et il trouvera le fournisseur utilisant l'URI.
Regardons maintenant la méthode la plus importantegetContentResolver().query(URI,String[] proj.....)
Que se passe-t-il lorsque
getContentResolver().query(URI,String[] proj.....)
est appelé
La méthode query()
appartient à la classe ContentResolver, mais elle invoque la méthode abstraite query () de ContentProvider résolu et renvoie l'objet Cursor.
De cette manière, l'application externe est exposée à la base de données privée via deux couches d'abstraction.
Juste pour ajouter plus de points
Vous ne pouvez pas créer votre propre classe ContentResolver, mais vous pouvez toujours créer votre propre Classe ContentProvider
J'espère que vous avez une meilleure compréhension
Vous pouvez également voir un exemple de code ici pour la création de SQLitedatabase, ContentProvider, etc., mais il n’est pas bien documenté.
Soyez en retard que jamais. J'ai trouvé une bonne explication pratique. Le démontrer
Supposons que vous souhaitiez retirer de l'argent d'une banque. Vous devrez suivre les étapes suivantes
Caissier dans ABC Bank (Content Resolver) -> Passerelle ABC Bank (Fournisseur de contenu) -> Bank Server (Database).
Ci-dessus, le caissier ne connaît ni la mise en œuvre de la passerelle bancaire, ni sa base de données
De la même manière, le résolveur de contenu interroge le fournisseur de contenu et ContentProvider expose les données stockées dans la base de données SQLite à une autre application sans informer de l'implémentation de votre base de données.