2016-05-17 8 views
2

Ich benutze Retrofit API in einer meiner App. Unten ist der Code: -Wie man Synchronous Task für Retrofit android

for(int i=0; i< mFileArrayList.size();i++){ 


    WebServiceManager.getInstance().getFrogService().postNotes("HI", "Hello", "Done", new Callback<NotesResponse>() { 

      @Override 
      public void success(NotesResponse response, retrofit.client.Response response2) { 
       System.out.println(response); 
       Toast.makeText(AllKPIActivity.this, "Success", Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       System.out.println(error); 
       Toast.makeText(AllKPIActivity.this, "Fail", Toast.LENGTH_SHORT).show(); 
      } 
     }); 


    } 

Was irgendwann passiert ist, bevor der Erfolg kommt, Schleife geht voran und Versagen kommt. Was ich will ist, wenn der erste Erfolg kommt, dann bewegt sich nur die Schleife voran. Bitte helfen Sie mir, wie kann ich das erreichen? Aus dem Hauptthread

Antwort

4

Wenn ich Sie wäre, würde ich den Code neu organisieren, um die Schleife manuell zu tun. So etwas wie dieses

int i = 0; 

private void fowardLoop(){ 
    if(i => mFileArrayList.size()){ 
     return; //loop is finished; 
    } 

    i++; 
    WebServiceManager.getInstance().getFrogService().postNotes("HI", "Hello", "Done", new Callback<NotesResponse>() { 

     @Override 
     public void success(NotesResponse response, retrofit.client.Response response2) { 
      System.out.println(response); 
      Toast.makeText(AllKPIActivity.this, "Success", Toast.LENGTH_SHORT).show(); 
      forwardLoop(); // loop continues only if you get the success callback from previous request. 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      System.out.println(error); 
      Toast.makeText(AllKPIActivity.this, "Fail", Toast.LENGTH_SHORT).show(); 
      // the loop breaks when there is failure callabck. 
     } 
    }); 
} 

benutzen Sie einfach die forwardLoop() -Methode, die Schleife zu beginnen, wo Sie

Der Nachrüst wollen, ist immer noch asynchron, aber die App verhält, wie Sie wollen. Ich hoffe, es wird hilfreich sein Ich habe diese Lösung nicht getestet.

+0

Dank Karol .. Es funktioniert +1 –

0

können Sie synchrone Retrofit-Anfragen machen, indem kein Rückruf

for(int i=0; i< mFileArrayList.size();i++){ 
     NotesResponse response = WebServiceManager.getInstance().getFrogService().postNotes("HI", "Hello", "Done"); 
} 

sicherstellen, dass Sie diesen Code ausführen vorbei. Als Referenz überprüfen Sie diese Anleitung https://futurestud.io/blog/retrofit-synchronous-and-asynchronous-requests

Verwandte Themen