ProgressDialog никогда не закрывается при получении JSON с AsyncTask

1

Я извлекаю JSON из Интернета с помощью AsyncTask, а также разбираю JSON в методе doInBackground(). Я начинаю свой прогрессDialog в onPreExecute() и отклоняю его в onPostExecute(). Проблема в том, что мой диалог никогда не увольняется, а затем я получаю вопрос ожидания/принудительного закрытия, или эмулятор просто зависает. Я попытался разобрать JSON из локального файла, и он сработал. Мой второй log.d() в doInBackground() никогда не печатается, а только первый.

My doInBackground() выглядит так:

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;
    }

Где я делаю ошибки?

Теги:
android-asynctask

2 ответа

0
Лучший ответ

Похоже, вы пытаетесь прочитать содержимое ответа в буфере, а затем используете это для создания представления String возвращаемых данных. Ошибка заключается в том, как вы создаете и используете буфер.

Однако, поскольку вам просто нужен String, было бы проще сделать это:

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

Вам также понадобится

import org.apache.http.util.EntityUtils;
  • 0
    Тнкс, я все усложнил.
0

Скорее очевидно, эта строка застревает в бесконечном цикле:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню