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 :

Récupération de données au lancement de l'application


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Récupération de données au lancement de l'application
    Bonjour,

    J'aimerai savoir dans quel fichier et méthode dois-je appeler mes fonctions qui récupère des flux json.

    J'ai besoin de ces flux avant le lancement de la première vue
    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    par fichier, je suppose que tu veux dire classe...

    il te faut une API Java qui te permets de manipuler du JSON (à moins que sur Androïd cela soit inclus, mais je ne connais pas pour dire)

    Par exemple, JACKSON

    ou JSON-P
    ou JSON.org
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    J'utilise déjà une class pour le json(JSONParser), mon problème n'ai pas de récupérer les flux json mais de faire attendre la première vue qui à besoin de ces données.

    voici mon bout de code pour le moment (je l'ai mit dans la methode onCreate de ma classe qui gère ma tabActivity):

    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
    21
    22
     
    final CountDownLatch latch = new CountDownLatch(2);
     
    			new Thread(new Runnable(){
    			  @Override
    			  public void run(){
    			    // Do something
    				  	JSONParser jParser = new JSONParser();
    					JSONObject json = jParser.getJSONFromUrl(urlCourseDuJour);
    					System.out.println("course du jour");
     
    					Donnees allDatas = Donnees.getInstance();
    					try {
    						allDatas.cdj = json.getJSONObject("coursedujour");
    					} catch (JSONException e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
     
    			    latch.countDown();
    			  }
    			}).start();

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par romaindu86 Voir le message
    J'utilise déjà une class pour le json(JSONParser), mon problème n'ai pas de récupérer les flux json mais de faire attendre la première vue qui à besoin de ces données.
    mais c'est bien ton programme qui l'affiche cette "vue" ?
    et avant de l'afficher, cette vue est créée (une instance de classe est créee, etc.)
    donc tu peux très bien charger les données avant de la créer, ou dans le constructeur, avant de l'afficher ?

    Quand tu parles de "vue", tu parles de quoi exactement ?
    Une JFrame ? ou toute classe AWT/SWING du genre ?
    Une classe de vue Eclipse RCP (étendant IViewPart) ou un Shell SWT ? ou tout classe SWT/JFACE du genre ?

    Si tu as besoin de charger des données et que ça prend du temps,
    - en swing, utilise un SwingWorker
    - en swt/jface, utilise un job, ou un IRunnableWithProgress

    le CountDownLatch permet quand tu utilises plusieurs threads, que certains attende le résultat d'autres pour continuer
    lorsqu'on fait du l'UI en java (en swing comme en swt), on fait le traitement de l'UI sur le thread graphique. On doit éviter de bloquer le thread graphique : si on utilisais un CountDownLatch pendant une chargement de données long, toute l'application serait bloquée tant que le chargement ne serait pas terminé. C'est là qu'intervient le SwingWorker en swing : il va faire le boulot dans son thread bien tranquille sans bloquer le thread graphique et à la fin il invoque la méthode done() ou il suffit de mettre le code qui remplit l'affichage.
    idem pour un Job swt ou un IRunnableWithProgress, ou dans le principe on fait un Display.getDefault().asyncExec(...) par exemple lorsqu'on a chargé les données.

    je te donnerai éventuellement plus de précision lorsque tu m'auras précisé dans quel environnement graphique tu te trouves et c'est quoi ta "vue" ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par romaindu86 Voir le message
    (je l'ai mit dans la methode onCreate de ma classe qui gère ma tabActivity
    hum, j'avais pas vu ce "onCreate"... donc j'avais pas capté que tu étais sur Android...

    là désolé, oublie ce que je t'ai dis dans mon post précédent, ça ne concerne à priori pas Androïd... et là je n'y connais pas grand chose
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je repasse 2 secondes au sujet du CountDownLatch...

    je sais rien de l'interconnexion avec l'UI Android... mais pour le CountDownLatch, comme je le disais dans le précédent post, il sert à permettre à des threads d'attendre que des "trucs" soit terminés

    lorsqu'on créé l'instance, on indique un compteur de "truc" qu'on va vouloir attendre, dans ton cas 2 (?) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final CountDownLatch latch = new CountDownLatch(2);
    ensuite il y'a des processus qui vont produire des données et indiqueront au CountDownLatch qu'un "truc" est fait :

    et d'autres qui doivent attendre que ces trucs soient fait. pour attendre :

    éventuellement on peut indiquer un timeout.

    un CoundDownLatch tel qu'il n'y a aucun process qui "attends" ne sert à rien...

    et évidement, il faut garantir qu'il y ait autant d'appel de countDown() que la valeur passée au constructeur du CountDownLatch, sinon le process qui attends risque d'attendre longtemps (sauf s'il y a un timeout, mais là il sera tout le temps en timeout).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Tous d'abord merci de ton implication.
    Comme je te le dit dans le message précédent j'utilise ce bout de code dans la méthode "oncreate" de mon activity qui créer mon tabhost.

    Je souhaite pour résumer charger plusieurs flux indépendamment (au moment de l'affichage de l'image de lancement de l'application)

    J'utilise "CountDownLatch" car je veux que ma vue attendre que tous les flux soient récupérer pour s'afficher.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par romaindu86 Voir le message
    Tous d'abord merci de ton implication.
    Comme je te le dit dans le message précédent j'utilise ce bout de code dans la méthode "oncreate" de mon activity qui créer mon tabhost.

    Je souhaite pour résumer charger plusieurs flux indépendamment (au moment de l'affichage de l'image de lancement de l'application)

    J'utilise "CountDownLatch" car je veux que ma vue attendre que tous les flux soient récupérer pour s'afficher.
    Salut,

    je comprends bien ce que tu veux faire. n'ayant aucune expérience du dev sur Androïd, je ne connais pas la solution.

    Mais en principe, une vue (un composant graphique) ne dois pas attendre qu'n la remplisse. On l'affiche vide ou on ne l'affiche pas. Ensuite, on charge des données et quand les données sont prêtes, on rafraîchit la vue : soit elle n'est pas encore affichée et donc on l'affiche, soit elle est affichée et donc on remplace son contenu.

    Si tes données sont constituées de plusieurs sous-ensembles et que tu charges chacun des ses sous-ensembles dans un thread séparé, il est peut être justifié d'utiliser un CountDownLatch si ces données doivent être affichées sous forme compilées dans une vue unique : par exemple, on charge une liste d'éléments d'un coté, et on calcule une moyenne pour chaque élément d'autre part, et on veut absolument que chaque élément et sa moyenne soient affichés simultanément.

    En java classique, swing, on peut :
    - soit afficher la vue comme d'habitude, puis lancer un ou plusieurs workers avec et remplir la vue lorsque tous les workers ont terminé (en utilisant un CountDownLatch pour s'assurer que tous les résultats sont là)
    - soit lancer un ou plusieurs worker, et afficher la vue remplie, dans les mêmes conditions que dans le cas précédent
    En SWT, on procéderais exactement de la même manière

    Je suppose que sous l'environnement Androïd on procèderait de manière similaire.

    En cherchant un peu sur google, je suis tombé sur ce lien : http://madskool.wordpress.com/2010/0...ds-and-the-ui/

    Est ce que ce lien ne te donnerait pas des voies à suivre ? Il semble qu'il s'agisse de différents exemple d'affichages utilisant des threads et engageant la classe Handler pour afficher les données soit au bout d'un délai, soit au bout d'un traitement long (simulé dans l'exemple par un sleep(1000).)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour tes explications. Je regarde ton lien et ce que je peux mettre en place. Je te tiens bien évidemment au courant de la solution adoptée.

  10. #10
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Sous Android, utiliser les classes de Loader et/ou d'AsyncTask pour effectuer les chargements/opérations longues.
    Cela permet de s'affranchir des classes de bas niveau (thread / handler / message).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Objective-C] [Core Data] Ou et comment charger des données au lancement de l'application
    Par gregfreemind dans le forum Objective-C
    Réponses: 0
    Dernier message: 29/06/2014, 15h53
  2. Récupération des données du serveur dans l'application Android
    Par Houssem16 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 26/05/2014, 13h30
  3. Réponses: 4
    Dernier message: 15/04/2014, 00h29
  4. Réponses: 9
    Dernier message: 06/01/2011, 18h53
  5. [XMLRAD] récupération de donnée
    Par Mitch79 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 30/01/2003, 16h36

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