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
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
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.
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();
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.
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.
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 (?) :
ensuite il y'a des processus qui vont produire des données et indiqueront au CountDownLatch qu'un "truc" est fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part final CountDownLatch latch = new CountDownLatch(2);
et d'autres qui doivent attendre que ces trucs soient fait. pour attendre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part latch.countDown();
éventuellement on peut indiquer un timeout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part latch.await();
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.
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.
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.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager