2011-01-10 1 views
1

Je récupère JSON à partir du Web avec AsyncTask et analyse également JSON dans la méthode doInBackground(). Je commence ma progressionDialogue dans onPreExecute() et le rejette dans onPostExecute(). Le problème est que ma boîte de dialogue n'est jamais ignorée et que je reçois la question wait/force close ou l'émulateur se bloque. J'ai essayé d'analyser JSON à partir du fichier local et cela a fonctionné. Mon second log.d() dans doInBackground() n'est jamais imprimé, seulement le premier.ProgressDialog n'est jamais rejeté lors de l'extraction de JSON avec AsyncTask

Mon doInBackground() ressemble à ceci:

private class DownloadFilesTask extends AsyncTask<String, Void, String> { 
    protected String doInBackground(String... url) { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     URI uri; 
     InputStream data=null; 
     String x=""; 
     try {   
      uri = new URI(url[0]); //url of my JSON file 
      HttpGet method = new HttpGet(uri); 
      HttpResponse response = httpClient.execute(method); 
      data = response.getEntity().getContent(); 

      byte [] buffer = new byte[data.available()]; 
      Log.d("First: ","ziv"); 
      while (data.read(buffer) != -1); 

      Log.d("Second: ",Integer.toString(buffer.length)); 

      String jsontext = new String(buffer); 
      JSONArray entries = new JSONArray(jsontext); 

      x = "JSON parsed.\nThere are [" + entries.length() + "]\n\n"; 

      int i; 
      for (i=0;i<entries.length();i++) 
      { 
       JSONObject post = entries.getJSONObject(i); 
       x += "------------\n"; 
       x += "Date:" + post.getString("created_at") + "\n"; 
       x += "Post:" + post.getString("text") + "\n\n"; 
      } 

     }  
     catch (IOException je) 
     { 
      je.printStackTrace(); 
     } 
     catch (URISyntaxException ur) { 
      ur.printStackTrace(); 
     } 
     catch (JSONException je) { 
      tvData.setText("Error w/file: " + je.getMessage()); 
     } 


     return x; 
    } 

Où suis-je en train de faire mistekes?

Répondre

0

Il semble que vous essayez de lire le contenu de la réponse dans un tampon, puis de l'utiliser pour créer une représentation String des données renvoyées. L'erreur est dans la façon dont vous créez et utilisez le tampon.

Cependant, puisque vous avez juste besoin d'un String, ne serait-il plus facile de le faire:

String jsontext = EntityUtils.toString(response.getEntity()); 

Vous aurez aussi besoin

import org.apache.http.util.EntityUtils; 
+0

Tnx, je compliquais le tout. – DixieFlatline

0

Il est plutôt évident, cette ligne est coincé dans un boucle infinie:

while (data.read(buffer) != -1); 
Questions connexes