2016-05-08 18 views
4

Im Versuch, alle Anfragen zu protokollieren (mit einem Netzwerk-Interceptor) mit refrofit2, Kotlin und Logging-Abfangjäger:HttpLoggingInterceptor Anmeldung nicht mit Retrofit 2

  • Nachrüstung: "2.0.2"
  • okhttp3: " 3.2.0"
  • com.squareup.okhttp3: Logging-Interceptor 3.2.0

wie:

val interceptor = HttpLoggingInterceptor() 
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 

    val okHttpClient = OkHttpClient.Builder() 
     .addNetworkInterceptor(interceptor) // same for .addInterceptor(...) 
     .connectTimeout(30, TimeUnit.SECONDS) //Backend is really slow 
     .writeTimeout(30, TimeUnit.SECONDS) 
     .readTimeout(30, TimeUnit.SECONDS) 
     .build() 

    sRestAdapter = Retrofit.Builder() 
     .client(okHttpClient) 
     .baseUrl(if (host.endsWith("/")) host else "$host/") 
     .addConverterFactory(GsonConverterFactory.create(gson())) 
     .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
     .build() 

Es bedrucken:

D/OkHttp: --> GET url... 
D/OkHttp: --> END GET 

Was geschieht?

--------------- EDIT --------

Fehler Anfragen auf Hauptthread tun nicht durch den Logger zeigt, so vorsichtig sein.

+1

http://stackoverflow.com/questions/33141407/logging-in-retrofit-2-0/38890345#38890345 –

Antwort

8

Statt

val okHttpClient = OkHttpClient.Builder() 
    .addNetworkInterceptor(interceptor) 
    ... 

sollten Sie so etwas wie haben:

val okHttpClient = OkHttpClient.Builder() 
    .addInterceptor(interceptor) 
    ... 

wie die addNetworkInterceptor() spielt mit Abfangjäger, die ein einzelnes Netzwerk Anfrage und Antwort zu beobachten, während addInterceptor() Interceptor fügt hinzu, dass die volle Spanne beobachtet von jedem Anruf: von der Verbindung wird (falls vorhanden) bis nach der Auswahl der Antwortquelle (entweder der Ursprungsserver, der Cache oder beide) eingerichtet.

EDIT

Fehler Anfragen auf Hauptthread tun werden vom Logger nicht angezeigt wird, so

Doing auf Hauptthread Vernetzung ist keine "normale" Fehler vorsichtig sein. Es führt in der App mit NetworkOnMainThreadException vom System getötet zu werden, und dies wird geschehen, bevor Abfangjäger eine Chance gegeben würden zu laufen.

Verwandte Themen