Morgan26 Posté(e) 10 septembre 2010 Share Posté(e) 10 septembre 2010 (modifié) Bonjour, Comme on me l'a demande je repost donc mon probleme dans ce topic : Il s'agit de reussir a utiliser un async Task dnas mon activity principal afin de supprimer le temps d'attente en effet je doit me connecter a un site web et recuperer des donnes. Voici tout d'abord le code qui marche sans utilisation d'asyncTask: package com.Sportandlive; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Sportandlive extends Activity implements OnClickListener { Button connection = null; public static final int CODE_RETOUR = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); connection = (Button)findViewById(R.id.connection); // On spécifie que le le listener est notre classe connection.setOnClickListener(this); } @Override public void onClick(View v) { final EditText email = (EditText)findViewById(R.id.email); final EditText password = (EditText)findViewById(R.id.password); // Vérification de la vue cliquée if (v == connection) { if(email.getText().length() > 0) { if(password.getText().length() > 0) { HttpPost httppost = new HttpPost("http://dev-sportandlive.ialw.net/webservice/connect"); List nameValuePairs = new ArrayList(); //On crée la liste qui contiendra tous nos paramètres //Et on y rajoute nos paramétres String md5Email = new Md5Convert().encode(email.getText().toString()); nameValuePairs.add(new BasicNameValuePair("email", md5Email)); nameValuePairs.add(new BasicNameValuePair("mdp", password.getText().toString())); //On lie la liste a l'instante httpPost try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); //ON envoie HttpClient httpclient = new DefaultHttpClient(); //ON recupere la reponse HttpResponse response; try { response = httpclient.execute(httppost); //ON stocke la reponse BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String s = reader.readLine(); Toast.makeText(Sportandlive.this, s, Toast.LENGTH_SHORT).show(); if (!(s.equals("false"))) { Toast.makeText(Sportandlive.this, "fin", Toast.LENGTH_SHORT).show(); /* Intent monIntent = new Intent(this,Actu.class); startActivity(monIntent);*/ } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } Et maintenant le code avec AsyncTask mais qui malheureusement ne marche pas ..: package com.Sportandlive; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import android.app.Activity; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Sportandlive extends Activity implements OnClickListener { Button connection = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); connection = (Button)findViewById(R.id.connection); // On spécifie que le le listener est notre classe connection.setOnClickListener(this); } private class DownloadFilesTask extends AsyncTask { String s; protected Long doInBackground() { HttpPost httppost = new HttpPost("http://dev-sportandlive.ialw.net/webservice/connect"); List nameValuePairs = new ArrayList(); //On crée la liste qui contiendra tous nos paramètres //Et on y rajoute nos paramétres String md5Email = new Md5Convert().encode("coucou"); nameValuePairs.add(new BasicNameValuePair("email", md5Email)); nameValuePairs.add(new BasicNameValuePair("mdp", "b")); //On lie la liste a l'instante httpPost try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); //ON envoie HttpClient httpclient = new DefaultHttpClient(); //ON recupere la reponse HttpResponse response; try { response = httpclient.execute(httppost); //ON stocke la reponse BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); s = reader.readLine(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } protected void onPostExecute() { if (!(s.equals("false"))) { Toast.makeText(Sportandlive.this, s, Toast.LENGTH_SHORT).show(); Intent monIntent = new Intent(Sportandlive.this,Actu.class); startActivity(monIntent); } } @Override protected Object doInBackground(Object... params) { // TODO Auto-generated method stub return null; } } @Override public void onClick(View v) { final EditText email = (EditText)findViewById(R.id.email); final EditText password = (EditText)findViewById(R.id.password); // Vérification de la vue cliquée if (v == connection) { if(email.getText().length() > 0) { if(password.getText().length() > 0) { new DownloadFilesTask().execute(); } } } } } Alors si quelqu'un comprends pourquoi ce code ne marche pas , et qu'il veut bien m'expliquer, ce serrait sympa ! Merci!! Modifié 10 septembre 2010 par Morgan26 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 10 septembre 2010 Share Posté(e) 10 septembre 2010 (modifié) Si tu codes ton traitement dans une méthode doInBackground que tu inventes toi-même, il ne risque pas de s'exécuter. Tu es senser réaliser le traitement dans la méthode doInBackground(...) qui est surchargée (celle avec le @Override avant) et dans lequel tu ne fais rien... enfin si, tu retournes null :) Modifié 10 septembre 2010 par Nivek Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Morgan26 Posté(e) 10 septembre 2010 Auteur Share Posté(e) 10 septembre 2010 Ha oui en effet :) Merci de ton aide ! Bon j'ai refait quelque test, cette fois ci mon traitement marche sur eclipse : [color=red][b]sa[/b][/color] m'affiche la premiere ligne que l'url doit me renvoyer, seulement quand j'essaye sur mon N1 je rentre les meme parametres mais cette fois, au lieu de planter (comme avant sans l'utilisation de asyncTask) Il ne fait rien du tout et ne m'affiche meme pas le retour de mon url ... Voici le code de l'Asynctask, le reste n'ayant pratiquement pas change : private class DownloadFilesTask extends AsyncTask { String s; @Override protected String doInBackground(String... params) { HttpPost httppost = new HttpPost("http://dev-sportandlive.ialw.net/webservice/connect"); List nameValuePairs = new ArrayList(); //On crée la liste qui contiendra tous nos paramètres //Et on y rajoute nos paramétres String md5Email = new Md5Convert().encode(params[0]); nameValuePairs.add(new BasicNameValuePair("email", md5Email)); nameValuePairs.add(new BasicNameValuePair("mdp", params[1])); //On lie la liste a l'instante httpPost try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); //ON envoie HttpClient httpclient = new DefaultHttpClient(); //ON recupere la reponse HttpResponse response; try { response = httpclient.execute(httppost); //ON stocke la reponse BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); s = reader.readLine(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return s; } protected void onPostExecute(String s) { Toast.makeText(Sportandlive.this, s, Toast.LENGTH_SHORT).show(); /* Intent monIntent = new Intent(Sportandlive.this,Actu.class); startActivity(monIntent); */ } } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 10 septembre 2010 Share Posté(e) 10 septembre 2010 (modifié) Essaye de faire du pas à pas avec le debugguer, une Exception doit être levée dans ton try catch Les logs disent quoi (puisque tu affiches l'Exception) ? Modifié 10 septembre 2010 par Fluckysan Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Morgan26 Posté(e) 10 septembre 2010 Auteur Share Posté(e) 10 septembre 2010 En fait je n'ai pas d'erreur dans eclipse, seulement quand j'installe l'apk sur mon N1 et que je lance l'appli au cliquant sur mon bouton il ne se passe rien, alors que sous eclipse sa marche Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 10 septembre 2010 Share Posté(e) 10 septembre 2010 Et les logs ne te disent rien ? Parce que tu affiches bien le Exception : e.printStackTrace(); Essayes en debug et pas à pas (F6 sous debugguer) pour voir par où il passe Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Morgan26 Posté(e) 10 septembre 2010 Auteur Share Posté(e) 10 septembre 2010 (modifié) ok j'essaye Bon alors deja pour mes log j'obtient ca : 09-10 08:09:11.022: DEBUG/dalvikvm(127): GC_EXTERNAL_ALLOC freed 2605 objects / 138664 bytes in 81ms 09-10 08:09:43.462: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.Sportandlive/.Sportandlive } 09-10 08:09:44.091: INFO/ActivityManager(59): Displayed activity com.Sportandlive/.Sportandlive: 518 ms (total 518 ms) 09-10 08:09:49.622: DEBUG/dalvikvm(127): GC_EXPLICIT freed 607 objects / 39280 bytes in 194ms 09-10 08:09:50.651: DEBUG/dalvikvm(120): GC_FOR_MALLOC freed 1583 objects / 216264 bytes in 106ms 09-10 08:09:51.631: WARN/KeyCharacterMap(120): No keyboard for id 0 09-10 08:09:51.631: WARN/KeyCharacterMap(120): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 09-10 08:09:51.881: DEBUG/dalvikvm(120): GC_EXTERNAL_ALLOC freed 1984 objects / 135320 bytes in 90ms 09-10 08:09:52.202: WARN/KeyCharacterMap(120): No keyboard for id 0 09-10 08:09:52.202: WARN/KeyCharacterMap(120): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 09-10 08:10:00.172: DEBUG/dalvikvm(275): GC_FOR_MALLOC freed 3497 objects / 166984 bytes in 142ms 09-10 08:10:00.541: INFO/global(275): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required. par contre je n'arrive pas a faire le mod debug pas a pas .. je vais dans debugg puis je fais F6 mais rien ne se passe. Modifié 10 septembre 2010 par Morgan26 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Morgan26 Posté(e) 10 septembre 2010 Auteur Share Posté(e) 10 septembre 2010 c'est peut etre cette ligne la qui pause probleme non ? : 09-10 08:10:00.541: INFO/global(275): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 10 septembre 2010 Share Posté(e) 10 septembre 2010 Nop je ne pense pas Pour le pas à pas il faut que tu mettes un point d'arrêt dans ton code puis que tu lances ton appli en mode debug Quand l'exécution arrive au point d'arrêt, tu peux faire du pas à pas Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Morgan26 Posté(e) 10 septembre 2010 Auteur Share Posté(e) 10 septembre 2010 (modifié) je fais click droit et tooggle breakpoint au niveau de la declaration de mon activity principale , [color=red][b]sa[/b][/color] m'affiche un C vert dans la marge a gauche. C'a m'a fait un point d'arret ca ? parce que quand je run je ne voit pas de differance EDIT : Ha c'est bon j'ai trouve j'essaye RE EDIT : bon donc il semblerait quand je run mon appli en debug qu'a aucun moment mon AsyncTask arrete de tourner : dans mon debug ca me fait Thread[<8> AsyncTask #1](Running) puis si je ressaye d'appuyer sur mon bouton ca me fait : Thread[<9> AsyncTask #2](Running) et le premier est toujour en running ... Ca viendrait donc du fait que mon Async Task ne se termine pas ? Modifié 10 septembre 2010 par Morgan26 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 10 septembre 2010 Share Posté(e) 10 septembre 2010 Non ça c'est ce qui tourne dans ton appli (si on parle de la même chose) Double-click dans la marche à gauche de : HttpPost httppost = new HttpPost("http://dev-sportandlive.ialw.net/webservice/connect"); Ca va te créer un BReakpoint (un point vert) Ensuite tu lances ton appli en mode debug (l'insecte vert en haut) et tu attends, l'exécution devrait se bloquer à la ligne du Breakpoint Si c'est le cas, tu peux ensuite continuer l'exécution pas à pas en appuyant sur F6 et voir où elle passe Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Morgan26 Posté(e) 10 septembre 2010 Auteur Share Posté(e) 10 septembre 2010 (modifié) OK c'est bon j'ai reussis a faire correctement le debug, dans l'onglet debug j'ai cela qui s'est affiche : Sportandlive [Android Application] DalvikVM[localhost:8662] Thread [<1> main] (Running) Thread [<6> Binder Thread #2] (Running) Thread [<5> Binder Thread #1] (Running) Thread [<7> Binder Thread #3] (Running) Thread [<8> AsyncTask #1] (Suspended (breakpoint at line 54 in Sportandlive$DownloadFilesTask)) Sportandlive$DownloadFilesTask.doInBackground(String...) line: 54 Sportandlive$DownloadFilesTask.doInBackground(Object...) line: 1 AsyncTask$2.call() line: 185 FutureTask$Sync.innerRun() line: 305 AsyncTask$3(FutureTask).run() line: 137 ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1068 ThreadPoolExecutor$Worker.run() line: 561 Thread.run() line: 1096 Et voila les variables que cela me genere dans l'onglet variables ( en enchainant plusieur fois F6) : this Sportandlive$DownloadFilesTask (id=830067860032) mFuture AsyncTask$3 (id=830067860064) mStatus AsyncTask$Status (id=830067781648) mWorker AsyncTask$2 (id=830067695808) s null this$0 Sportandlive (id=830067688504) params String[2] (id=830067705184) [0] "tes" (id=830067705248) [1] "cou" (id=830067705344) httppost HttpPost (id=830067711080) aborted false abortLock ReentrantLock (id=830067702096) connRequest null entity UrlEncodedFormEntity (id=830068102264) headergroup HeaderGroup (id=830067707736) params null releaseTrigger null uri URI (id=830067711272) nameValuePairs ArrayList (id=830067755648) md5Email "28b662d883b6d76fd96e4ddc5e9ba780" (id=830067806344) count 32 hashCode 0 offset 0 value (id=830067806032) Modifié 10 septembre 2010 par Morgan26 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Morgan26 Posté(e) 10 septembre 2010 Auteur Share Posté(e) 10 septembre 2010 (modifié) Ha ha !! J'ai trouve ou se situe le probleme ! J'ai tout simplement mis en commentaire tout ce que j'ai dans mon doInBackground et du coup quand je rentre dedans, sa quitte direct en me faisant un toast . Sa marche sur Eclipse ET sur mon telephone. Donc je pense que le probleme vient du fait que mon tel n'aime pas le HttpPost .. Tu saurais a quoi cela peut etre due ? Par exemple peut etre qu'il faut modifier des parametres pour que mon tel se connecte a internet .. Plus particulièrement, c'est cette ligne : response = httpclient.execute(httppost); qui fait planter mon tel Yahouuuuuuuuu !! SA marche !!! J'ai trouve ma solution ici : http://stackoverflow.com/questions/3046424/http-post-requests-using-httpclient-take-2-seconds-why Modifié 10 septembre 2010 par Morgan26 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.