Asynchrones Abrufen eines JSON-Feeds

  • 15 Antworten
  • Letztes Antwortdatum
P

Patschi

Erfahrenes Mitglied
55
Guten Tag,

ich versuche ein JSON-Feed herunterzuladen und es danach zu parsen, jedoch scheitert es am bei dem AsyncTask.Execute Befehl. Ich habe bereits einige verschiedene Möglichkeiten getestet, aber bin noch nicht auf einen grünen Zweig gekommen.

Der Code sieht bisher so aus:
Code:
package com.patschi.scenegamers;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import com.patschi.scenegamers.R;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.view.Menu;
import android.widget.Toast;

/*
	// MODE_PRIVATE defines that no other app can access the data
	SharedPreferences settings = this.getSharedPreferences("SceneGamersApp", MODE_PRIVATE);
	    	
	// save data in the shared preferences
	SharedPreferences.Editor editor = settings.edit();
	editor.putString("Username", "Hans Wurst");
	editor.commit();
	    	
	// remove the setting again
	editor.remove("Username");
	editor.commit();
*/

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loadNews();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    private void loadNews() {
 		class HttpGetAsyncTask extends AsyncTask<String, Void, String>{
			@Override
			protected String doInBackground(String... params) {	
		    	HttpClient httpClient = new DefaultHttpClient();
				HttpGet httpGet = new HttpGet("http://domain.tld/json.php");
				try {
					HttpResponse httpResponse = httpClient.execute(httpGet);
					System.out.println("httpResponse");
					InputStream inputStream = httpResponse.getEntity().getContent();
					InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
					BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
					StringBuilder stringBuilder = new StringBuilder();
					String bufferedStrChunk = null;
					while((bufferedStrChunk = bufferedReader.readLine()) != null){
						stringBuilder.append(bufferedStrChunk);
					}
					return stringBuilder.toString();	
				 } catch (ClientProtocolException cpe) {
					System.out.println("Exception of httpResponse:" + cpe);
					cpe.printStackTrace();
					return null;
				 } catch (IOException ioe) {
					System.out.println("2nd exception of httpResponse:" + ioe);
					ioe.printStackTrace();
					return null;
				}
		    }
			
			@Override
			protected void onPostExecute(String result) {
				super.onPostExecute(result);
				Toast.makeText(getApplicationContext(), "Done.", Toast.LENGTH_LONG).show();
			}
			
			HttpGetAsyncTask httpGetAsyncTask = new HttpGetAsyncTask();
[COLOR="Red"]			HttpGetAsyncTask.execute();[/COLOR]
    	} 	
    }   
}
Pastebin: [Java] Android HTTP - Pastebin.com

Zur Hilfe genommen habe ich mir:
Handling HTTP GET method in Android | Anu's crazy world

Vielen Dank für eure Hilfe! :)
 
Fehlermeldung?
 
Oh ja, sorry. In der Eile, den Zug zu erwischen komplett vergessen zu erwähnen :)

2013-03-15_1510.png


Syntax error on token "execute", Identifier expected after this token
 
Wie sieht denn deine AsyncTask-Klasse aus?
Vielleicht musst du noch einen Parameter mit übergeben...

Gruß

€dit: Ich volltrottel xD String musst du noch mit übergeben...
€dit2: Du verwirsst total oO Du hast in einer Methode eine neue Klasse? :O Und diese rufst du dann in sich selbst auf... oO Oder waas?
€dit3: Vergiss edit 2.. Dein Code ist für mich kaum lesbar xD
 
Zuletzt bearbeitet:
MUSS ich oder KANN ich? Ich habe nichts zu übergeben, da er nur den JSON Feed holen braucht, ohne irgendwas hinzusenden.
 
class HttpGetAsyncTask extends AsyncTask<String, Void, String>
Habe mit AsyncTask selbst noch nicht den durchblick. Aber soweit ich weiß, wenn du hier
AsyncTask<String, Void, String>
aus dem String ein Void machst, übergibst du nichts. Also muss ins execute auch nichts.
Wenn dort aber ein String steht, so wie es bei dir ist, dann musst du auch einen übergeben...

Gruß

€dit: Schnell mal gesucht, und gefunden: http://stackoverflow.com/a/6053673
 
Habe ich auch schon probiert. Ergebnis war folgendes:
2013-03-15_1533.png


Fehler bei "class":
2013-03-15_1532.png


Der selbe Fehler blieb bei "execute" weiterhin.
 
Du hast noch string dort stehen

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Ja, beim letzten. Bei der Zurückgabe handelt es sich ja um einen String - wenn ich das so richtig verstanden habe. Auch wenn ich alle drei Werte auf "void" ändere, tauchen die selben Fehler auf... Habe bereits damit versucht, da es nichts gebracht hatte, habe ich den Thread dazu eröffnet :)
 
du hast

String doInBackground(String...values)

das müsste aber
String doInBackground(Void ...values)

sein
 
Oh, stimmt. Da ist ja auch noch was :D
Die oberen Zeilen funktionieren nun, "execute" Fehler besteht leider weiterhin.
 
bitte lerne zuerst java, das macht es um einiges einfacher

new xxxtask().execute();
 
Versuche ich ja - Learning by doing. Nur stecke ich gerade fest und komme nicht weiter...
Verschiedenste Möglichkeiten funktionieren einfach nicht...

HttpGetAsyncTask httpGetAsyncTask = new HttpGetAsyncTask().execute;

HttpGetAsyncTask httpGetAsyncTask = new HttpGetAsyncTask();
httpGetAsyncTask.execute();

new HttpGetAsyncTask.execute();

Nichts davon.
 
Ich Sehe mindestens 2 Varianten die funktionieren

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Ich eigentlich auch - aber Eclipse sieht das nicht so und verwehrt die Ausführung.
 
Leute ihr macht es euch so schwer...warum?

Gesendet von meinem Galaxy Nexus mit Tapatalk 2
 
Zurück
Oben Unten