82 votes

J'ai besoin d'un exemple de projet client REST Android qui met en œuvre le modèle d'implémentation REST de Virgil Dobjanschi.

Je veux construire un client REST sur un téléphone Android.

Le serveur REST expose plusieurs ressources, par exemple (GET)

http://foo.bar/customer      List of all customer
http://foo.bar/customer/4711    The customer with id 4711
http://foo.bar/customer/vip     List of all VIP customer

http://foo.bar/company           List of all companys
http://foo.bar/company/4711     The company with the ID 4711
http://foo.bar/company/vip      List of all VIP companys

Je (pense) savoir comment parler au serveur REST et obtenir les informations dont j'ai besoin. J'implémenterais une classe client REST avec une API comme celle-ci

public List<Customer> getCustomers();
public Customer getCustomer(final String id);
public List<Customer> getVipCustomer();

public List<Company> getCompanies();
public Customer getCompany(final String id);
public List<Customer> getVipCompanies();

Se réfère à la présentation " Développer des applications clientes Android REST "J'ai appris de Virgil Dobjanschi que ce n'est pas une bonne idée de traiter la requête REST dans un Worker Thread de l'activité. Au lieu de cela, je devrais utiliser la fonction Service API.

J'aime l'idée d'avoir un Singleton ServiceHelper qui se lie à un service (local) mais je crains de ne pas avoir bien compris le concept de service.

Pour l'instant, je ne comprends pas comment rapporter le résultat d'un appel REST (effectué de manière asynchrone dans un service) à l'activité appelante. Je me demande également si j'ai besoin d'UN SEUL service qui gère toutes les requêtes REST (avec différents types de retour) ou si j'ai besoin d'un service dédié pour chaque requête REST.

J'ai probablement beaucoup d'autres problèmes de compréhension, donc la meilleure chose à faire pour moi serait un application type qui répond à mes besoins. Mon cas d'utilisation n'est pas inhabituel et j'espère qu'il existe un exemple d'application.

Vous pouvez me le faire savoir !

Toute autre suggestion qui m'oriente vers une mise en œuvre correcte est également utile (la démonstration de l'API Android ne correspond pas à mon cas d'utilisation).

Merci d'avance.

Klaus

EDIT : Sujets similaires trouvés sur SO (après avoir posté ceci) qui m'ont conduit dans la direction dont j'ai besoin (minimiser le complexe "modèle Dobjanschi") :

50voto

Necronet Points 3212

Vue d'ensemble

Edit :

Toute personne intéressée peut également envisager de jeter un coup d'œil à RESTful Android cela pourrait vous donner un meilleur aperçu de la situation.

Ce que j'ai appris de l'expérience en essayant de mettre en œuvre le modèle de Dobjanschi, c'est que tout n'est pas écrit dans la pierre et qu'il ne vous donne qu'un aperçu de ce qu'il faut faire, ce qui peut changer d'une application à l'autre, mais la formule est la suivante :

Suivez ces idées + Ajoutez les vôtres = application Android heureuse

Le modèle de certaines applications peut varier d'une exigence à l'autre ; certaines peuvent ne pas avoir besoin du compte pour le SyncAdapter, d'autres peuvent utiliser C2DM, celui que j'ai travaillé récemment pourrait aider quelqu'un :


Créer une application qui a un compte et un AccountManager.

Il vous permettra d'utiliser le SyncAdapter pour synchroniser vos données. Ceci a été discuté sur Créez votre propre SyncAdapter

Créer un ContentProvider (si cela correspond à vos besoins)

Cette abstraction vous permet non seulement d'accéder à la base de données, mais aussi d'accéder au ServiceHelper pour exécuter des appels REST, car il dispose d'une méthode de mappage un à un avec l'arche REST.

Fournisseur de contenu | Méthode REST

demander ----------------> GET

insérer ----------------> PUT

mise à jour ----------------> POST

supprimer ----------------> DELETE

Superposition de ServiceHelper

Ce type va essentiellement démarrer un (des) service(s) qui exécute(nt) une méthode REST Http (pas nécessairement le protocole mais c'est le plus commun) avec les paramètres que vous avez passés depuis le ContentProvider. J'ai passé l'entier de correspondance qui est obtenu à partir de l'UriMatcher sur le fournisseur de contenu afin que je sache à quelle ressource REST accéder, c'est à dire.

class ServiceHelper{

    public static void execute(Context context,int match,String parameters){
//find the service resource (/path/to/remote/service with the match
//start service with parameters 
    }

}

Le service

Il est exécuté (j'utilise IntentService la plupart du temps) et va vers le RESTMethod avec les paramètres passés par l'helper, à quoi sert-il ? Rappelez-vous que les services sont bons pour exécuter des choses en arrière-plan.

Implémentez également un BroadCastReceiver pour que, lorsque le service a terminé son travail, il prévienne l'activité qui a enregistré cette diffusion et lui demande à nouveau. Je crois que cette dernière étape ne figure pas dans la conférence Virgill, mais je suis sûr que c'est une bonne façon de procéder.

Classe RESTMethod

Prend les paramètres, la ressource WS( http://myservice.com/service/path ) ajoute les paramètres, prépare tout, exécute l'appel et enregistre la réponse.

Si l'authtoken est nécessaire, vous pouvez le demander à l'AccountManager. Si l'appel du service échoue à cause de l'authentification, vous pouvez invalider l'authtoken et réauthentifier pour obtenir un nouveau token.

Enfin, la méthode RESTMethod me donne soit un XML soit un JSON, peu importe que je crée un processeur basé sur le matcher et que je passe la réponse.

Le processeur

Il est chargé d'analyser la réponse et de l'insérer localement.

Un exemple d'application ? Bien sûr !

De même, si vous vous intéressez à une application de test, vous regardez Eli-G Ce n'est peut-être pas le meilleur exemple, mais il suit l'approche REST des services, il est construit avec ServiceHelper, Processor, ContentProvider, Loader et Broadcast.

17voto

Jeremy Haberman Points 700

Programmation Android a un chapitre complet (13. Exploring Content Providers) consacré à l'"Option B : Use the ContentProvider API" de la conférence Google I/O de Virgil.

Nous ne sommes pas les seuls à voir les avantages de cette approche. Lors de la conférence Google I/O de mai 2010, Virgil Dobjanschi, de Google, a présenté un exposé décrivant les trois modèles suivants d'utilisation des fournisseurs de contenu pour intégrer des services Web RESTful dans les applications Android...

Dans ce chapitre, nous allons explorer en détail le deuxième modèle à l'aide de notre deuxième exemple vidéo Finch ; cette stratégie apportera un certain nombre d'avantages importants à vos applications. En raison de l'élégance avec laquelle cette approche intègre les opérations réseau dans Android MVC, nous lui avons donné le surnom de "Network MVC".

Une prochaine édition de Programming Android pourra aborder les deux autres approches, ainsi que documenter plus en détail cette présentation de Google. Après avoir terminé la lecture de ce chapitre, nous vous suggérons de visionner la présentation de Google.

Hautement recommandé.

Programming Android par Zigurd Mednieks, Laird Dornin, G. Blake Meike et Masumi Nakamura. Copyright 2011 O'Reilly Media, Inc. 978-1-449-38969-7.

11voto

ChrLipp Points 6445

"Developing Android REST client applications" par Virgil Dobjanschi a donné lieu à de nombreuses discussions, car aucun code source n'a été présenté pendant la session ou n'a été fourni par la suite.

Veuillez commenter si vous connaissez d'autres implémentations.

7voto

Snicolas Points 19644

Nous avons développé une bibliothèque qui aborde ce problème : RoboSpice .

La bibliothèque utilise l'"approche de service" décrite par Virgil Dobjanschi et Neil Goodmann mais nous offrons une solution complète tout-en-un qui :

  • exécute de manière asynchrone (dans un AndroidService en arrière-plan) des requêtes réseau requêtes qui renverront des POJO (ex : requêtes REST)
  • met en cache les résultats (en Json, ou Xml, ou fichiers texte plats, ou fichiers binaires)
  • notifie vos activités (ou tout autre contexte) du résultat du réseau s'ils sont toujours en vie
  • n'informe pas vos activités du résultat si elles ne sont plus en vie
  • notifie vos activités sur leur fil d'interface utilisateur
  • utilise un modèle de traitement des exceptions simple mais robuste
  • prend en charge plusieurs ContentServices pour regrouper différents services web résultats
  • supporte le multithreading des exécutions de demandes
  • est fortement typée !
  • est open source ;)
  • et testé

Nous sommes actuellement à la recherche de commentaires de la part de la communauté.

3voto

Yoni Samlan Points 21748

Vous devriez consulter le code source de la version officielle de Google. Application I/O 2010 pour commencer, notamment le SyncService et les différentes classes de la sous-paquetage io .

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