2011-06-09 5 views
1

J'essaie de faire un utilitaire httpClient classeAsyncTask ne fonctionne que la première fois

Mon code fonctionne très bien la première exécution. Lors du débogage, la seconde exécution n'interviendra pas, ou n'exécutera pas, donc quelque chose est foiré.

L'activité/Listener

protected String getPage(String url, List<NameValuePair> namevaluePairs, String postOrGet, Activity whichActivity, String dialogText) { 
    try { 
     httpHelper.setListValues(namevaluePairs); 
     httpHelper.setPostOrGet(postOrGet); 
     httpHelper.setParentActivity(whichActivity); 
     httpHelper.setDialogText(dialogText); 
     httpHelper.execute(url); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return resultHTML; 
} 

La classe utilitaire:

public class HTTPHelper extends AsyncTask<String, Void, Void> { 
    private String resultString; 
    private HttpClient httpclient; 
    private List<NameValuePair> nameValuePairs; 
    private String postOrGet; 
    private Activity parentActivity; 
    private String Error; 
    private String dialogText; 
    private ProgressDialog Dialog; 
    WebServiceListener listener; 

    public HTTPHelper(WebServiceListener listener) { 
     this.listener = listener; 
     Error = null; 
     httpclient = new DefaultHttpClient(); 
     postOrGet = "get"; 
     nameValuePairs = null; 
     dialogText = "Logging in"; 
    } 

    @Override 
    public void onPreExecute() { 
     super.onPreExecute(); 
     Error = null; 
     Dialog.setMessage(dialogText); 
     Dialog.show(); 
    } 

    @Override 
    public void onPostExecute(Void unused) { 
     Dialog.dismiss(); 
     if (Error != null) { 
      Toast.makeText(parentActivity, Error, Toast.LENGTH_LONG).show(); 
     } else { 
      ArrayList<String> myList = new ArrayList<String>(); 
      myList.add(resultString); 
      listener.onHTTPGetComplete(myList); 
     } 
    } 

    public void setDialogText(String txt) { 
     dialogText = txt; 
    } 

    public void setListValues(List<NameValuePair> incNameValuePairs) { 
     nameValuePairs = incNameValuePairs; 
    } 

    public void setPostOrGet(String pOrG) { 
     postOrGet = pOrG; 
    } 

    public void setParentActivity(Activity myAct) { 
     parentActivity = myAct; 
     Dialog = new ProgressDialog(parentActivity); 
    } 

    @Override 
    protected Void doInBackground(String... urls) { 
     BufferedReader in = null; 
     try { 
      HttpGet httpget = new HttpGet(urls[0]); 
      HttpPost httppost = new HttpPost(urls[0]); 
      HttpResponse response = null; 

      if (postOrGet.toLowerCase().contains("post")) { 
       httppost.setHeader("Content-Type", "application/x-www-form-urlencoded"); 
       try { 
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8)); 
        response = httpclient.execute(httppost); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } else { 
       try { 
        response = httpclient.execute(httpget); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      try { 
       in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 
      String NL = System.getProperty("line.separator"); 
      try { 
       while ((line = in.readLine()) != null) { 
        sb.append(line + NL); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      try { 
       in.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      resultString = sb.toString(); 
      return null; 
     } finally { 
     } 
    } 
} 

Répondre

2

Un AsyncTask ne peut être exécuté qu'une seule fois comme indiqué dans la documentation: http://developer.android.com/reference/android/os/AsyncTask.html

Ainsi, pour chaque vous demandez besoin pour créer un nouvel objet d'assistance.

Edit:

Check this out: ThreadSafeClientConnManager

+0

A travaillé comme un champion. Merci Ravi et Haphazard. Je vous avais upvote les deux mais je n'ai pas encore assez de points. – kireol

+0

@ user763472 Vous devez accepter une bonne réponse et non seulement l'augmenter. Je ne pense pas que vous ayez besoin de points pour accepter la réponse à votre question. Accepter les réponses encouragera les gens à vous aider. –

+0

Salut Ravi, je l'ai fait la même chose, mais ce ne sont pas WORKING 'public void onClick (Voir v) { \t \t \t \t \t index int = groupPos; // lire maintenant le champ mChildStates correspondant et traiter les données. \t \t \t \t \t \t \t \t \t \t booléenne chBoxesState [] = mChildCheckStates.get (index); \t \t \t \t \t // envoyer ces données à AVAL \t \t \t \t \t Log.d ("On clique Vinit", "Je suis ici"); \t \t \t \t \t RequestCloser reqCloser = null; \t \t \t \t \t reqCloser = nouveau RequestCloser(); \t \t \t \t \t reqCloser.execute (chBoxesState); \t \t \t \t} 'Pouvez-vous m'aider s'il vous plaît – codeomnitrix

0

Créer une nouvelle instance de la AsyncTask (HTTPHelper dans votre cas) chaque fois que vous l'exécutez.

Questions connexes