2016-08-16 2 views
1

Ich habe gemeinsame Anfrage und Antwort mit AsyncTask.THREAD_POOL_EXECUTOR. Ich habe den Wiederholungszähler manuell implementiert. Nun, was geschieht, wenn zwei Web-Service gleichzeitig arbeiten, dann verwenden sie Wiederholungszähler voneinander.Retrofit 2.0 Retry Count

Ich benutze Nachrüstung mit Client OkHttpClient.

+0

Ich denke, Sie sollten Synchronized Method verwenden und innerhalb dieser Methode sollten Sie diesen Zähler übergeben und den Wert erhöhen. – Gokul

Antwort

0

nehme ich es gelöst benutzerdefinierte Anruf (zwingende Rückruf von Retrofit) wieder verwenden. Übergeben Sie in dieser Klasse die Wiederholungsanzahl. Bei Erfolg oder Fehlschlag der Antwort haben Sie Zugriff auf die Anzahl der Wiederholungen, die spezifisch für den Web-Service sind. Sie stören sich also nicht im Falle einer parallelen Ausführung.

@POST("/xyz/abc/") 
    void getSomeData(
      @Body TypedInput body, 
      Callback<Response> callback); 

Sie können Ihren benutzerdefinierten Rückruf erstellen und übergeben und einen Objekt/int-Wert speichern, um die Anfrage eindeutig zu identifizieren.

public interface CustomOnRequestFinishedListener { 

    void onSuccess(Object response, Response retrofitResponse, Object data); 

    void onError(RetrofitError error, Object data); 
} 

CustomOnRequestFinishedListener implementieren, wo Sie CustomCallback anrufen möchten und Erfolg/Misserfolg Rückruf

public class CustomCallback extends CallBack 
    { 
    private final Object data; 
private final CustomOnRequestFinishedListener customOnRequestFinishedListener; 
    public CustomCallback(CustomOnRequestFinishedListener customOnRequestFinishedListener, Object data) 
    { 
     this.data = data; 
this.customOnRequestFinishedListener = customOnRequestFinishedListener; 
    } 

    @Override 
    public void success(Object o, Response response) 
    { 
     customOnRequestFinishedListener.onSuccess(o, response, data); 
    } 

    @Override 
    public void failure(RetrofitError error) 
    { 
     customOnRequestFinishedListener.onError(error, data); 
    } 
    } 

Auf diese Weise werden Sie zunächst einige einzigartige Daten in Anforderung Einstellung erhalten und werden dieselben Daten in Antwort erhalten.

+0

Wie stelle ich Listener in Interceptor. Müssen Sie explizit ein Objekt des Interceptors erstellen? – Dhrupal

+0

Nicht im Abfangjäger. In einem api-Anruf können Sie Ihren eigenen Listener für bestimmte APIs bereitstellen. Bearbeiten meiner ans ... – Ramit

+0

bearbeitet meine Antwort ... – Ramit