2017-10-18 3 views
0

Ich weiß, dass es schon einige Diskussionen gibt und ich habe im Internet viel nach einer Lösung gesucht, ich habe 3 Aufrufe (Volley) Ich möchte nacheinander ausführen, weil der nächste holen muss Variablen, die vorher auf den get gesetzt wurden, scheint aber hier nicht zu funktionieren. Wenn ich den gesamten Prozess debugge, funktionierte es natürlich gut, aber wenn ich die App normalerweise ausführe, bekomme ich keine Daten, die ich beim Debuggen bekommen hätte.Async-Tasks nacheinander ausführen

Jetzt habe ich versucht, statische boolean Variablen zu setzen diese ganze Sache Arbeit zu machen, aber Theres bisher keinen Erfolg ..

public class AsyncToken extends AsyncTask<String , Void, Void> { 

private PacketBuilder pb = new PacketBuilder(); 
private Context context; 
AsyncUser u = new AsyncUser(context); 

@Override 
protected Void doInBackground(String... params) { 

    while(task1finished == false) 
    { 
     try 
     { 
      Log.d("App", "Waiting for GetTask"); 
      Thread.sleep(1000); 
     } 
     catch (InterruptedException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    Log.d("App", "GetTask finished"); 
    // Do what ever you like 
    // ... 
    pb.Get("token", "", params[0], context); 

    return null; 
} 

protected void onPostExecute(String ... params) 
{ 
    task2finished = true; 

} 

public AsyncToken(Context context) 
{ 
    this.context = context; 
} 

} 

EDIT, der Code: Code where i start the first asynctask, in the end i check if the object i should have gotten with get is there, if yes, i start another activity

first asynctask

last asynchtask

Antwort

2

Wenn die asynchrone Task abgeschlossen ist onPostExecute() aufgerufen wird, starten Sie eine andere asynchrone Task mit berechneten Werten. Sie können globale Variablen haben, was berechnet werden soll, oder Sie können sie über Parameter übergeben.

//start first async task 
new TaskOne().execute(); 


class TaskOne extends AsyncTask<Void,Void,String>{ 
    String tmp; 


    @Override 
    protected String doInBackground(Void... records) { 
     tmp = computeNeededValue(); 

     return tmp; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     new TaskTwo().execute(tmp); 
    } 
) 

class TaskTwo extends AsyncTask<String,Void,Void>{ 

    @Override 
    protected Void doInBackground(String... records) { 
     //use computed value from first task here 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     //start another async task 
    } 
) 
+0

habe ich versucht, diese Lösung und zu überprüfen, ob diese Arbeit tut i, wenn die Variablen überprüft i aus dem get bekam gesetzt wurden, nichts, im diesen Fehler: Versuch, virtuelle Methode ‚java.lang.String org aufzurufen. json.JSONObject.getString (java.lang.String) 'für einen Null-Objektverweis. Und entweder debugge ich falsch oder es springt nicht in onPostExecute. –

+0

@AlexandraK. Kannst du diesen Code posten? –

+0

bearbeitet es, zuerst ist die Ausführung der ersten Aufgabe, wo ich auch nach jeder Aufgabe überprüfen, ob ich das Objekt mit dem get, wenn ja, ich habe eine neue Aktivität, das zweite Bild ist die erste Aufgabe, die dritte, die letzte Aufgabe. –

Verwandte Themen