Я работаю над разбором веб-сайта в своем приложении.AsyncTask в Android?
Это сайт: https://raw.github.com/currencybot/open-exchange-rates/master/latest.json
Так как у меня были некоторые проблемы с этим, я первый пытался получить весь сайт, используя класс, который расширяет AsyncTask.
Вот код, который получает все из вышеприведенного сайта:
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls)
{
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try
{
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
}
Однако, если вы идете на сайт, я хочу только часть после ставки. Мне нужно отредактировать приведенный выше код, чтобы он возвращал только то, что мне нужно.
Основываясь на том, что я понимаю, я знаю, что мне нужно изменить ответ String на ArrayList, и мне нужно изменить цикл while, но я не знаю, что я должен делать точно.
Я попытался использовать следующий код, чтобы изменить метод, но он НЕ работал.
private class DownloadWebPageTask extends AsyncTask<String, Void, ArrayList<String>> {
@Override
protected ArrayList<String> doInBackground(String... urls)
{
ArrayList<String> response = new ArrayList<String>();
for (String url : urls)
{
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try
{
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = response.toString();
while ((s = buffer.readLine()) != null)
{
JSONArray ja = new JSONArray(s);
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
response.add(jo.getString("rates"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
}
Любая помощь будет принята с благодарностью.
@Dheeraj, UPDATE:
while ((s = buffer.readLine()) != null)
{
JSONArray ja = new JSONObject().getJSONArray("rates");
response.add(ja.toString());
}
Это то, что я до сих пор Dheeraj. Я зациклился на том, как предоставить буфер JSONObject. Вы можете мне помочь?
Как это не работает? – huntsfromshadow
Он побежал, и это не дает мне какие-либо ошибки, но когда я добавил этот метод: – sameetandpotatoes
защищен недействительным onPostExecute (ArrayList результата) { \t \t \t tv.setText (result.get (0)); } Это означает, что результат не содержит ничего (было вызвано событие IndexOutofBoundsException) –
sameetandpotatoes