110 votes

Lors de l'utilisation d'un Fournisseur de Contenu

Je comprends que les Fournisseurs de Contenu sont faites pour permettre publiquement le partage de données entre les applications. Cependant, je me demandais si quelqu'un a des pensées de faire un Fournisseur de Contenu à utiliser seulement au sein de votre propre application. Y aurait-il des avantages à le faire? Les inconvénients?

Dans le passé, j'ai juste mis en œuvre le SQliteOpenHelper pour accéder à des données de ma base de données, mais je suis en train d'étudier la création d'un Fournisseur de Contenu. Je me sens comme l'URI de l'approche à la demande de données est claire et concise. D'autre part, à l'aide d'un Fournisseur de Contenu juste pour que ma demande soit redondant ( depuis l'intérieur, je vais avoir un SQliteOpenHelper classe ) et plus de travail que j'ai besoin?

120voto

Paul Drummond Points 1833

Je dirais que c'est vraiment une bonne idée d'utiliser un ContentProvider même si vous n'avez pas l'intention de le rendre public.

Il est de bonne pratique que le niveau supplémentaire d'abstraction au-dessus de vos données afin de faciliter les changements en interne. Que faire si vous décidez de changer la structure de base de données sous-jacente à une date ultérieure? Si vous utilisez un ContentProvider vous pouvez contenir tous les changements structurels au sein de, où comme si vous ne l'utilisez pas, vous êtes obligé de changer tout le code qui sont touchés par les changements structurels. En outre, il est agréable d'être en mesure de ré-utiliser le même standard de l'API pour l'accès aux données plutôt que simplement votre code avec un faible niveau d'accès à la base de données.

Aussi, il ya toujours la chance que vous pourriez exposer vos données dans le futur. Si vous n'utilisez pas un ContentProvider à l'avant, il sera beaucoup plus difficile pour rénover il à une date ultérieure.

Ensuite, il y a les autres parties de l'Android où ContentProvider's sont nécessaires/recommandée comme lors de l'utilisation d' SyncAdapters et si vous voulez une Application Widget qui implique d'accès de données par exemple.

En résumé, il y a très peu de frais généraux impliqués dans la rédaction d'un ContentProvider (une fois que vous avez appris de l'API qui est une bonne idée de toute façon) il est donc logique de le faire, de même pour les données privées.

64voto

Cristian Points 92147

Si vous ne prévoyez pas de partager des données, ne pense pas à des Fournisseurs de Contenu. Ils sont puissant mais difficile à écrire, et il sera tout simplement ridicule à mettre en œuvre si vous allez les utiliser en interne.

Cependant, je me demandais si quelqu'un a des pensées de faire un Fournisseur de Contenu à utiliser seulement au sein de votre propre application.

Bien sûr... par exemple, pour une vieille liste de choses à faire application que j'ai écrit, je l'ai eu à écrire un fournisseur de contenu pour permettre à d'autres applications de récupérer et d'accéder aux tâches unis. Il a été une partie des besoins, mais plus que cela a un sens et fait de l'application plus agréable.

7voto

Jetez un oeil à la MOTODEV Studio for Eclipse. C'est un environnement de développement qui s'étend de l'Éclipse. Ils disposent d'un outil où vous pouvez générer automatiquement un fournisseur de contenu pour une base de données. Si un fournisseur de contenu facilite l'accès à vos données et il n'a pas un impact significatif sur les performances d'aller de l'avant et de l'utiliser. Dans la plupart des cas ce sera le cas.

4voto

Shubhayu Points 5072

Je suis d'accord ContentProviders sont un peu difficile à saisir, mais ils sont certainement utiles, même si vous voulez les utiliser en interne pour votre propre application. La meilleure chose à ce sujet est que vous pouvez personnaliser le contentproviders convient à une Uri.

Voici un scénario où vous pouvez avoir 5 tables dans votre base de données, mais vous avez besoin de joindre quelques-uns d'entre eux de certaines commandes avant de les utiliser. Et de faire un contenu URI pour chacun de ces jointures. Vous pouvez ensuite chaque utilisation de ces Uri comme une table :)

Je vous suggère d'aller de l'avant avec le Fournisseur de Contenu, vous serez étonné de voir combien il est puissant.

2voto

J. K. Points 419

J'ai créé mon propre infrastructure pour l'obtention de données à partir du serveur, de les stocker localement dans une base de données SQLite, puis de le lire, à l'aide des interfaces personnalisées et fortement employant l'observateur (listener); et asynctasks pour lecture et écriture à partir de la Base de données.

PUIS j'ai découvert l'existence de la ContentProvider, et quand j'ai lu les trois chapitres d'un livre sur le sujet, j'étais vidé, parce qu'il semblait soulever une montagne pour atteindre la même chose que j'ai fait, mais ma version semble beaucoup plus simple et plus facile à maintenir. Et j'ai eu peur parce qu'apparemment, je n'étais pas à faire les choses de la bonne façon.

Maintenant que j'ai lu à ce sujet, les gens avec plus d'expérience, disant qu'il n'est pas obligatoire et c'est une douleur dans le cul, je suis heureux à nouveau, et j'ai l'intention de développer mon système au lieu d'utiliser le Fournisseur de Contenu...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X