in asynctask auf daten warten

  • hallo zusammen, kann ich irgendwie in einem asynctask auf daten warten, oder diese dem Task übergeben, die von einer service- klasse bereitgestellt werden?


    Mein Problem ist, dass beim Start des Asynctask (dieser befindet sich in einer Activity) die Daten aus dem Service noch nicht vorliegen.
    Beide (Asynctask und Service) werden im onResume der Activity gestartet.


    Einfach ein sleep in den Asynctask??


    Danke für eure Meinungen

  • Spontan: nö.
    Ist ja auch eigentlich nicht der Sinn und Zweck des asynctask. Der soll im Hintergrund Dinge tun und nicht im Hintergrund auf Dinge warten.


    Warum wirfst du nicht einfach einen Broadcast aus dem Service, wenn die Daten da sind und deine Activity startet den asynctask, sobald sie diesen Broadcast empfängt?
    (Ich hoffe, die Bezeichnungen sind korrekt für Java...)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hi,


    ich habe es mit dem observer pattern ( http://de.wikipedia.org/wiki/Beobachter_(Entwurfsmuster) ) gemacht, was wunderbar funktioniert.


    Du erstellst dir ein interface für den "observer", z.B.


    Java
    public interface OnHalelujaListener
    {	
    	public void aktualisiere(Typ deineDaten);
    }



    In deiner Klasse ABC die eine private class der AsyncTask hat, fügst du dann folgendes hinzu:


    Java
    private OnHalelujaListener onHalelujaListener = null;
    	public void setOnHalelujaListener(OnHalelujaListener listener){	onHalelujaListener = listener;}



    In der Klasse ABC wird dann der Aufruf für den AsyncTask gemacht. Um dann die Daten weiter geben zu können, gestalltet man die onPostExecute der AsyncTask Klasse wie folgt:


    Java
    @Overrideprotected void onPostExecute(TypA deineDaten){	if (onHalelujaListener != null)	{		onHalelujaListener.aktualisiere(deineDaten);	}}



    Jetzt kann überall dort wo eine Instanz der Klasse ABC erstellt wird, die Daten empfangen wenn man dort den den Handler hinzufügt (in onCreate z.B.):


    Java
    test = new ABC();
    test.setOnHalelujaListener(new OnHalelujaListener(){	@Override	public void aktualisiere(TypA deineDaten)	{			// Mache hier was du damit machen willst	}});



    Das war es dann schon.


    (Mein Quelltext wird leider jedesmal falsch formatiert... drei mal angepasst)


    Viele Grüße
    redneb

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!