Ich arbeite an der Analyse einer Website in meiner Anwendung.AsyncTask in Android?
Dies ist die Website: https://raw.github.com/currencybot/open-exchange-rates/master/latest.json
Da ich damit einige Schwierigkeiten gehabt haben, habe ich versucht zunächst eine Klasse die gesamte Website zu erhalten, die mit AsyncTask erstreckt.
Hier ist der Code, der über alles von der Website bekommt:
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;
}
}
Wenn Sie jedoch auf die Website gehen, ich will nur den Teil nach Raten. Ich muss den obigen Code bearbeiten, damit er nur das zurückgibt, was ich brauche.
Basierend auf dem, was ich verstehe, weiß ich, dass ich String-Antwort auf eine ArrayList ändern muss, und ich muss die While-Schleife ändern, aber ich weiß nicht, was ich genau machen soll.
Ich habe versucht, mit dem folgenden Code die Methode zu ändern, aber es hat nicht funktioniert.
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;
}
}
Jede Hilfe würde sehr geschätzt werden.
@Dheeraj, UPDATE:
while ((s = buffer.readLine()) != null)
{
JSONArray ja = new JSONObject().getJSONArray("rates");
response.add(ja.toString());
}
Das ist, was ich bisher Dheeraj haben. Ich bin auf, wie man den Puffer zu einem JSONObject bereitstellt. Kannst du mir helfen?
Wie hat es funktioniert nicht? – huntsfromshadow
Es lief und es hat mir keine Fehler geben, aber wenn ich hinzugefügt, um diese Methode: – sameetandpotatoes
protected void OnPostExecute (Arraylist Ergebnis) { \t \t \t tv.setText (result.get (0)); } Dies bedeutet, dass das Ergebnis nichts enthält (IndexOutofBoundsException wurde ausgelöst) –
sameetandpotatoes