2016-08-18 2 views
2

Ich möchte die Lese-Timeout auf OkHttp Client mit Retrofit für einen API-Anruf ändern. Um es klar zu sagen, ich habe einen Endpunkt, der sehr lange dauern kann, ich muss sein Timeout und nur die Zeitüberschreitung für diesen einen API-Anruf erhöhen. Kann ich das durch Anmerkungen machen? Gibt es eine Möglichkeit, dies zu tun, ohne die Timeouts für den Rest der App zu ändern?Retrofit Änderung lesen Timeout für einen API-Aufruf

Antwort

0

können Sie tun eigentlich eine pro Rufkonfiguration

Kopieren Sie die Standard-Builder und machen einen anderen Client

private final OkHttpClient client = new OkHttpClient(); 

    public void run() throws Exception { 
    Request request = new Request.Builder() 
     .url("http://blah_blah_api.com/") // This URL is served with a 1 second delay. 
     .build(); 

    try { 
     // Copy to customize OkHttp for this request. 
     OkHttpClient copy = client.newBuilder() 
      .readTimeout(500, TimeUnit.MILLISECONDS) 
      .build(); 

     Response response = copy.newCall(request).execute(); 
     System.out.println("Response 1 succeeded: " + response); 
    } catch (IOException e) { 
     System.out.println("Response 1 failed: " + e); 
    } 

    try { 
     // Copy to customize OkHttp for this request. 
     OkHttpClient copy = client.newBuilder() 
      .readTimeout(3000, TimeUnit.MILLISECONDS) 
      .build(); 

     Response response = copy.newCall(request).execute(); 
     System.out.println("Response 2 succeeded: " + response); 
    } catch (IOException e) { 
     System.out.println("Response 2 failed: " + e); 
    } 
    } 
+0

Ich benutze Retrofit mit Dagger-2, eine Möglichkeit, dies zu lösen, ohne benannte Variablen für OkHttp zu erstellen? – Ali

+0

Ich habe nicht am Dolch gearbeitet. Ich bin mir bewusst, dass dies ein Tool zur Abhängigkeitsinjektion ist. Wie wäre es mit dem Erstellen einer Hilfsklasse und dem Übergeben der Klassenvariablen an Ihre Aktivität als Abhängigkeit? Entschuldigung, wenn ich irreführe. –

2

ich eine ähnliche Situation. Ich löse mein Problem mit zwei Api-Instanzen in meinem ApiModule, jeder mit Ihrem eigenen OkHttpClient. Verwenden Sie @Named, um jedes zu identifizieren.

Ich versuchte zu vermeiden, zwei Instanzen nur für eine Timeout-Konfiguration bereitzustellen, scheint ein wenig seltsam für mich, aber da meine API-Instanz ein Singleton (für die Leistung) ist, konnte ich keine andere Lösung sehen.