|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2007 Messages : 219 ![]() |
Bonjour à tous,
Je suis en train de développer une application dans laquelle j'ai une activité qui exécute un thread. Dans ce thread, j'appelle une fonction qui envoie une requête HTTP à un serveur, puis qui parse avec le Framework jSoup la page renvoyée. Cette fonction (appelée requestAndMakeSheet() dans mon code ci-dessous) renvoie une exception si le parsing jSoup ne trouve pas certains éléments dans la page (ce qui veut dire que le login/mot de passe n'est pas bon, en fait). Je voudrais que ce thread affiche un message d'erreur à l'utilisateur quand cette exception est levée, puis qu'il le renvoie vers l'activité principale, où il doit saisir ses identifiants. Si par contre l'exception n'est pas levée, l'activité affiche la page HTML dans une webView. Voici le code de mon thread: Code :
J'ai essayé plein de trucs vus sur StackOverflow, mais y a rien à faire! Ce sont eux entre autres qui m'ont dit d'entourer mon message d'un thread runOnUiThread, mais le mettre ou pas n'a donné aucune différence. Et si je le mets en lieu et place du thread t1 tout en haut, l'app plante dès qu'elle arrive sur l'activité qui contient ce thread!? Pourriez-vous m'aider à comprendre ce qui se passe? Merci d'avance.
__________________
C'est de nos erreurs qu'on apprend. Si ça pouvait être le cas du compilateur, ça nous arrangerait bien... |
||
|
|
00
|
|
|
#2 | ||||
![]() ![]() |
Y a des trucs bizarres quand même:
?????? quel intérêt de faire un thread alors si c'est pour attendre qu'il se termine aussitôt ? D'autant que si t1 rame un peu... l'application sera interrompue avec un ANR. Et puis de toute manière c'est interdit ^^ Sinon, dans le code, tout est mélangé... le thread, le dialog d'erreur ... c'est à se perdre à mon avis: Le thread fait une action (pourquoi passer un new Runnable() ? autant surcharger run() du thread non ?) Éventuellement on code comme cela: Code :
A noter que l'utilisation d'AsyncTask aurait grandement simplifier les choses (voire d'un 'loader' si le but était de charger quelque chose): Code :
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !Et surtout
|
||||
|
|
00
|
|
|
#3 | ||||||
|
Nouveau Membre du Club
![]() Inscription : décembre 2007 Messages : 219 ![]() |
La vache, je ne connaissais rien de tout ce que tu m'as évoqué, je connais à peine l'utilité d'un thread, et je l'utilise parce que je suis obligé pour mes requêtes HTTP dedans.
En fait ce que fait mon thread, c'est charger une page web et la parser avec jSoup pour l'afficher d'une manière particulière dans une webView. Mais dans le fond, je ne sais pas si c'est la meilleure façon de faire, sauf que c'est la SEULE qui ait marché jusqu'à présent. :/ Je vais voir ce qu'est un Loader si j'ai encore le temps (projet à finir pour bientôt, donc j'ai peur de faire de grosses modifs qui partent en sucette). ASyncTask -> très mal expliqué sur le web. Tu aurais un bon exemple? Sinon, j'ai réussi à afficher mon alert dialog comme ça: Code :
Code :
J'ai déclaré ceci avant la grosse méthode nuclearRequest (elle s'appelle comme ça du fait de son énorme taille, justement Code :
En fait, mon application est prévue pour, lorsque je suis dans l'activité principale, j'ai un bouton qui envoie en extras le login et le mot de passe que l'user a saisis dedans, à l'activité qui contient le code ci-dessus et le thread. Cette seconde activité va requêter un serveur en HTML, parser la page avec jSoup, afficher un message d'erreur si le parsage a des problèmes (ce qui signifie forcément que le login/mot de passe est mauvais), et afficher la page si tout se passe bien. Le problème, c'est que entre le moment où je clique sur le bouton qui m'emmène de la première activité à la seconde, j'ai pendant un long moment une page noire, puis pendant un très bref instant la fenêtre de chargement, et enfin le chargement de la page ou le message d'erreur. Pourquoi?
__________________
C'est de nos erreurs qu'on apprend. Si ça pouvait être le cas du compilateur, ça nous arrangerait bien... |
||||||
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() ![]() Sylvain HébuterneIngénieur développement logiciels Inscription : juillet 2009 Messages : 16 ![]() |
La classe AsyncTask est typiquement faite pour cela, et très simple à utiliser.
Un tuto, parmi d'autres, ici : http://www.tutos-android.com/asyncta...one-background |
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2007 Messages : 219 ![]() |
Ah d'accoooooooord!
ASyncTask c'est un objet, qu'on instancie dans notre activité principale!? Je croyais que c'était un type d'activité en soi. Edit: Merci infiniment pour ce magnifique tuto qui démystifie bien cette notion tarabiscottée.
__________________
C'est de nos erreurs qu'on apprend. Si ça pouvait être le cas du compilateur, ça nous arrangerait bien... |
|
|
00
|
|
|
#6 | |
![]() ![]() Inscription : août 2004 Messages : 8 637 ![]() |
Citation:
Voir les débats sur composition/délégation vs héritage. (http://en.wikipedia.org/wiki/Composi...er_inheritance) Dans l'absolue, l'idée, c'est que tu n'obtiendras aucun gain par l'extension de Thread, et tu te trouveras avec un objet possédant tout un paquet de méthodes dont tu n'as absolument pas besoin. Il est préférable de limiter l'utilisation de l'héritage à des composants/classes dont on veut redéfinir le mode de fonctionnement.
__________________
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something. |
|
|
|
00
|
|
|
#7 | |
![]() ![]() |
Citation:
![]() Et puis de toute manière faut utiliser AsyncTask
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !Et surtout
|
|
|
|
00
|
|
|
#8 | ||||
|
Nouveau Membre du Club
![]() Inscription : décembre 2007 Messages : 219 ![]() |
Bon, j'ai fini par y arriver, youpiiiiiiii!
Code :
Code :
Pour être honnête, je m'attendais à ce genre de problème, mais je ne me rappelle plus du pourquoi. Comment y remédier? Merci d'avance.
__________________
C'est de nos erreurs qu'on apprend. Si ça pouvait être le cas du compilateur, ça nous arrangerait bien... |
||||
|
|
00
|
|
|
#9 |
![]() ![]() ![]() |
Bonjour,
Cela n'est pas normal Tu remet ta variable à No après avoir exécuté ton AsyncTask, là ou il me semble ou tu interprètes ta variable pour savoir si tu dois afficher ton dialogue se fait dans le onPostExecute ce qui veux dire que tu auras forcément ta variable à No. Tu met à jour trop vite ta variable, ou tu ne met pas à jour ta variable au bon endroit |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com