[Java][GWT] RequestBuilder
Fermé
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
-
Modifié par matthoffman le 12/09/2011 à 11:33
matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 - 12 sept. 2011 à 16:39
matthoffman Messages postés 405 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 22 janvier 2013 - 12 sept. 2011 à 16:39
A voir également:
- [Java][GWT] RequestBuilder
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
3 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 12/09/2011 à 13:22
Modifié par KX le 12/09/2011 à 13:22
J'avoue ne pas connaître le GWT, et donc je ne peux pas tester. Cependant tu peux essayer de renvoyer l'arbre en sortie de la méthode qui le construit...
De plus, plutôt que d'utiliser split qui te créé dans le tableau lines une copie de text, j'ai utilisé Scanner qui est bien plus efficace pour lire ligne par ligne. D'ailleurs ta construction de split avec ton StringBuffer est assez moche, tu peux directement mettre ton pattern dans un String. De plus tu peux limiter le nombre de String en retour, par exemple pour ton deuxième split tout ce qui est après infos[1] tu ne t'en sers pas, donc autant mettre tout ce qui reste dans infos[2] c'est plus rapide.
À étudier, sans garantie que ça regle ton problème ;-)
De plus, plutôt que d'utiliser split qui te créé dans le tableau lines une copie de text, j'ai utilisé Scanner qui est bien plus efficace pour lire ligne par ligne. D'ailleurs ta construction de split avec ton StringBuffer est assez moche, tu peux directement mettre ton pattern dans un String. De plus tu peux limiter le nombre de String en retour, par exemple pour ton deuxième split tout ce qui est après infos[1] tu ne t'en sers pas, donc autant mettre tout ce qui reste dans infos[2] c'est plus rapide.
À étudier, sans garantie que ça regle ton problème ;-)
import java.util.Scanner; import java.util.TreeMap; public class LovParser { public final TreeMap<String, String> items; public LovParser() { items = new TreeMap<String, String>(); } public TreeMap<String,String> parseHgrp2() { RequestCallback rcb = new RequestCallback() { @Override public void onResponseReceived(Request req, Response resp) { Scanner sc = new Scanner(resp.getText()); while (sc.hasNextLine()) { String[] infos = sc.nextLine().split("[\\t]",3); switch (infos.length) { case 0 : break; case 1 : items.put(infos[0], ""); break; default: items.put(infos[0], infos[1]); } } sc.close(); } @Override public void onError(Request res, Throwable throwable) { } }; try { new RequestBuilder(RequestBuilder.GET, "tst.lov").sendRequest("", rcb); } catch (RequestException e) { e.printStackTrace(); } return items; } public static void main(String...args) { TreeMap<String,String> items = new LovParser().parseHgrp2(); } }La confiance n'exclut pas le contrôle
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
Modifié par matthoffman le 12/09/2011 à 16:48
Modifié par matthoffman le 12/09/2011 à 16:48
Tout d'abord bonjour et merci de passer du temps sur mon probleme.
Plusieurs choses:
1) J'ai oublie de le preciser etant donne que ca ne concerne pas directement mon probleme mais GWT ne supporte malheureusement pas grand chose de Java (bien qu'au fur et a mesure des versions certaines fonctions vitales apparaissent).
Et donc tu le devineras, je sais que j'ai code comme un porc mais je n'ai pas le choix ^^. Scanner n'etant pas supporte par GWT je ne peux donc pas l'utiliser ...
Si tu voyais comment j'ai depoper mon TreeMap, c'est un assassinat a la ref Java (pollfirstentry n'etant pas supporte par GWT, j'ai du d'abord recuperer la 1ere key, puis sa valeur associee puis ensuite depoper le set <K, V>. Enfin bref un grand n'importe quoi).
2) Edit: J'avais mal lu l'histoire de la petite opti pour split. Merci pour l'astuce je corrige ca, *normalement* le fichier est cense etre bien forme ^^ !
3) Renvoyer l'arbre en sortie du parser etait une solution que j'avais aussi envisagee, mais etant donne que le renvoit se fait en dehors de la requete le probleme est le meme, la fonction va directement renvoyer un arbre vide parce qu'il n'aura pas attendu la reponse.
Et sans Thread.Sleep() et ba c'est la mouise ...
Du coup cette implementation ne fonctionne pas *avec GWT* :(
Plusieurs choses:
1) J'ai oublie de le preciser etant donne que ca ne concerne pas directement mon probleme mais GWT ne supporte malheureusement pas grand chose de Java (bien qu'au fur et a mesure des versions certaines fonctions vitales apparaissent).
Et donc tu le devineras, je sais que j'ai code comme un porc mais je n'ai pas le choix ^^. Scanner n'etant pas supporte par GWT je ne peux donc pas l'utiliser ...
Si tu voyais comment j'ai depoper mon TreeMap, c'est un assassinat a la ref Java (pollfirstentry n'etant pas supporte par GWT, j'ai du d'abord recuperer la 1ere key, puis sa valeur associee puis ensuite depoper le set <K, V>. Enfin bref un grand n'importe quoi).
2) Edit: J'avais mal lu l'histoire de la petite opti pour split. Merci pour l'astuce je corrige ca, *normalement* le fichier est cense etre bien forme ^^ !
3) Renvoyer l'arbre en sortie du parser etait une solution que j'avais aussi envisagee, mais etant donne que le renvoit se fait en dehors de la requete le probleme est le meme, la fonction va directement renvoyer un arbre vide parce qu'il n'aura pas attendu la reponse.
Et sans Thread.Sleep() et ba c'est la mouise ...
Du coup cette implementation ne fonctionne pas *avec GWT* :(
matthoffman
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
47
Modifié par matthoffman le 12/09/2011 à 16:40
Modifié par matthoffman le 12/09/2011 à 16:40
Je fais un double post (je sais c'est pas bien), mais c'est pour la lisibilite.
C'est juste pour vous dire, etant donne que je ne voyais pas vraiment comment "attendre" le reponse a la requete, j'ai mis le chargement du TreeMap dans la "fonction d'initialisation" (grossomodo), et la recuperation du TreeMap dans une fonction evenementielle (qui ne peut donc se declencher qu'apres initialisation).
Cela regle donc le probleme que j'ai. Mais bon j'ai bien peur que cette solution ne soit tres "reliable" (j'en perds mon francais ...)
Donc je reste ouvert a toute autre proposition :) et remercie KX !
C'est juste pour vous dire, etant donne que je ne voyais pas vraiment comment "attendre" le reponse a la requete, j'ai mis le chargement du TreeMap dans la "fonction d'initialisation" (grossomodo), et la recuperation du TreeMap dans une fonction evenementielle (qui ne peut donc se declencher qu'apres initialisation).
Cela regle donc le probleme que j'ai. Mais bon j'ai bien peur que cette solution ne soit tres "reliable" (j'en perds mon francais ...)
Donc je reste ouvert a toute autre proposition :) et remercie KX !