Я извлекаю 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;
}
Где я делаю ошибки?
Похоже, вы пытаетесь прочитать содержимое ответа в буфере, а затем используете это для создания представления String
возвращаемых данных. Ошибка заключается в том, как вы создаете и используете буфер.
Однако, поскольку вам просто нужен String
, было бы проще сделать это:
String jsontext = EntityUtils.toString(response.getEntity());
Вам также понадобится
import org.apache.http.util.EntityUtils;
Скорее очевидно, эта строка застревает в бесконечном цикле:
while (data.read(buffer) != -1);