IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Requète HTTP JSON via ASyncTasck


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut Requète HTTP JSON via ASyncTasck
    Bonjour à tous,

    Cela fait quelques temps que je m'inspire du forum pour résoudre mes erreurs et suivre les cours qui sont géniaux

    Mais la je vais devoir vous demander conseil car je ne pige pas la logique...

    J'utilise l'API Google Maps pour afficher des Markers qui sont stockés sur mon serveur. Au début, j'utilisais un simple Thread pour faire la requète HTTP et pour Parser le tableau JSON que je récupérais. Ensuite, pour chaque élément du tableau je faisais appel à un Handler. En effet, pour pouvoir ajouter un Marker sur la map il faut ètre sur l'activité principale (d'ou le role du Handler). Néanmoins, le Handler ne suivait le traitement effectuer dans un boucle pour chaque élement du tableau: sur 70 élements seulement une vingtaine s'affichaient ... Je devais cliquer au moins 3 fois sur mon bouton pour tout afficher.


    En faisant quelque recherche, j'ai vu qu'il était préférable d'utiliser un AsyncTasck pour justement effectuer ce traitement en entier et récupérer les élements de mon tableau.

    Voila comment fonctionne mon code:
    -> Appel du ASynctasck depuis mon activité principale
    -> Dans le AsyncTasck, la requète HTTP se passe et je Parse mon tableau (en utilisant les méthodes DoInBackground() & onPostExecute())
    -> Comment transmetter mes Markers d'ici à l'activité principale ?

    J'ai essayer deux méthodes pour résoudre mon problème (mais qui ne marche pas):
    -> Appel d'une méthode de l'activité principale depuis l'ASyncTasck pour afficher les Markers. Problème: je suis pas dans la bonne activité (Activité princpale nécessaire pour ajouter les Markers).
    -> Faire appel à une méthode dans l'activité principale (qui fera appel à un Getter de mon tableau JSON de l'AsyncTasck) à la suite de mon ASyncTasck.execute(). Problème: le traitement n'attend pas la fin d'éxecution de l'AsyncTasck et appel direct la méthode qui m'affichera un NullPointerException car mon tableau JSON est vide (depuis le Getter).


    Si quelqu'un pourrait m'orienter sur mon problème car la je ne vois pas du tout comment la jouer!


    ++

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Il faut simplement que ton AsyncTask notifie ton Activity dans le onPostExecute, lui dire "eyh, j'ai fini, et voici les Markers !".

    Pour ce faire, il faut que ton AsyncTask connaisse l'Activity ou le Fragment qui l'appelle et invoque une méthode (au hasard : putMarkersOnMap(List<Marker>) ).

    C'est un pattern Observer à mettre en place en somme.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut
    Salut Hizin,

    Merci de ta réponse

    Je comprends un peu mieux la logique.

    J'avais oublié de préciser mais lors de mes tests, j'ai remarquer que l'AsyncTasck continue de tourner en boucle ... Comment lui dire "hey, j'ai finis !" comme tu dis ?

    Pour le pattern Observer, je vais regarder sa de plus prés. Merci encore de m'avoir mis sur la bonne piste !

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    L'AsyncTask continue de tourner ?
    Alors ton code doit avoir un problème. Une AsyncTask réalise le onPreExecute, puis le doInBackground, puis le onPostExecute.

    Le onPostExecute n'est appelé qu'une fois le doInBackground est fini.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 70
    Par défaut
    Effectivement, il continue de tourner dans le vide .. J'avais utiliser une méthode bidon qui affichait un message bidon dans un while(AsynTasck.getStatus(RUNNING) et cela me faisait planter l'appli ^^

    J'utilise le doInBackground pour faire ma requête http et le traitement JSON après je fais appel au onPostExecute() (dans ma méthode doInBackground) et de la bah j'étais bloqué.. Et je trouvais cela étonnant de devoir l'appelé moi même.

    Je dois avoir une petite erreur de le code de l'AsyncTask ..

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Activity:
        * MyTask task = new MyTask(... parametres optionnels ...);
        * task.execute(PARAMS);
        * return;
    
    Task:
    (UI thread)    * onPreExecute()
    
    Task:
    (worker thread) * doInBackground(PARAMS);
                          * return RESULT;
    
    Task:
    (UI thread)    * onPostExecute(RESULT)
         * Activity.this.onTaskFinished(RESULT);
    
    Activity:
        * onTaskFinished(RESULT)
        * ...;

Discussions similaires

  1. POST d'un fichier xml via requête HTTP
    Par sofiane_bfm007 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 16/12/2010, 21h40
  2. [AJAX] Envoi flux Json via Requete HTTP
    Par viscere dans le forum AJAX
    Réponses: 3
    Dernier message: 01/09/2010, 09h55
  3. Exécuter requête HTTP via PHP
    Par calitom dans le forum Langage
    Réponses: 0
    Dernier message: 15/07/2010, 15h11
  4. requêtes http via openssl
    Par gaelle40 dans le forum Réseau
    Réponses: 2
    Dernier message: 10/07/2009, 17h33
  5. Réponses: 3
    Dernier message: 23/10/2007, 23h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo