2010-08-20 5 views
3

Je regarde la vidéo Google I/O 2010 sur ce sujet et j'ai quelques questions pour m'assurer que je comprends bien.Modèles de base de données et de service Web

Google I/O 2010 - Android REST client applications

S'il vous plaît noter que j'ai aussi une compréhension très limitée de CursorAdapters

En ce moment, ma demande a juste une couche d'interface utilisateur. J'ai créé un objet appelé DbAdapter en utilisant des tutoriels Google pour créer une petite base de données et une table dans cette base de données.

J'ai créé une classe que j'appelle DataBroker (extension de ContentProvider) pour gérer la récupération des données de la base de données et l'appel des services Web pour mettre à jour les données.

Scénarios:

1) Supposons que je veux afficher la liste des articles dans mon ListActivity. Ai-je raison de supposer que j'écrirai une fonction dans mon DataBroker qui crée un Cursor à la table dans ma base de données qui contient ces éléments, lance un service qui lance un thread qui appelle un service web pour obtenir des éléments supplémentaires, puis retourne le Cursor à mon fil d'interface utilisateur? Faire ceci retournerait probablement le Curseur à mon fil d'interface utilisateur avant que le service Web ait fini, mais, je suppose, une fois que le CursorAdapter a un Curseur, il montrera automatiquement toutes les modifications faites à cette table de base de données, oui?

2) Maintenant, j'ai une liste d'éléments dans ma ListView. Supposons que je donne à l'utilisateur certaines fonctionnalités pour supprimer un élément. L'utilisateur exécute cette fonctionnalité. Il devrait appeler une fonction dans mon DataBroker qui met à jour la ligne dans ma base de données correspondant à cet élément, définissant la colonne status à STATE_DELETING (qui supprimera la ligne de ListView car le curseur a une clause excluant cet état), puis déclenche une service qui déclenche un thread qui frappe mon service Web, puis supprime la ligne dans la base de données lorsque vous avez terminé? En outre, supposons que j'ai plusieurs activités, est-ce que je cherche à avoir un curseur statique pour chaque activité avec une liste, en saisissant ce curseur dans l'activité onCreate, et si ce curseur est nul, en tapant mon DataBroker?

+0

Je suppose que l'accès à la base de données devra également se faire dans un service. Est-ce que je dois avoir un service (base de données de coup) lançant un service (coup service de Web)? – Andrew

+0

Je pense que je me penche plus vers le modèle ContentProvider. Je pourrais vraiment utiliser un tutoriel sur ce sujet avec des extraits de code si quelqu'un en connaît un. – Andrew

Répondre

1

Comme personne n'a répondu, je vais répondre à ce que je l'ai fait (et semble fonctionner)

Il convient de noter que je l'ai renommé DataBroker. Mon ContentProvider est maintenant appelé par un autre nom et j'ai maintenant un service étendu que j'ai appelé DataBroker.

1) Je ne fais pas ma requête Cursor dans un service. J'appelle le curseur dans l'activité et appelle le service (DataBroker) pour interroger le service Web pour de nouvelles données. Si de nouvelles données sont trouvées, le DataBroker diffuse un message, reçu par n'importe quelle écoute d'activité, et l'activité re-interroge le curseur.

2) Je remets, via un Intent, l'identifiant de la ligne devant être effacée de mon Service (DataBroker). Le service marque la colonne d'état pour cet ID en tant que STATE_DELETING, utilise un service Web pour indiquer à mon serveur que la ligne a été supprimée et, si le serveur le confirme, supprime la ligne de ma base de données. En outre, après que la ligne a été marquée STATE_DELETING, je diffuse un message auquel toutes les activités intéressées peuvent s'abonner, les informant que je l'ai fait. De cette façon, l'activité peut re-interroger son curseur (qui ne renvoie pas les lignes STATE_DELETING).

Questions connexes