Ich kann in der Retrofit-API keine relevanten Methoden zum Protokollieren vollständiger Anforderungs- / Antwortkörper finden. Ich hatte Hilfe im Profiler erwartet (aber er bietet nur Metadaten zur Antwort). Ich habe versucht, die Protokollebene im Builder festzulegen, aber das hilft mir auch nicht:
RestAdapter adapter = (new RestAdapter.Builder()).
setEndpoint(baseUrl).
setRequestInterceptor(interceptor).
setProfiler(profiler).
setClient(client).
setExecutors(MyApplication.getWebServiceThreadPool()).
setLogLevel(LogLevel.FULL).
setLog(new RestAdapter.Log() {
@Override
public void log(String msg) {
Log.i(TAG, msg);
}
}).
build();
EDIT: Dieser Code funktioniert jetzt. Ich weiß nicht, warum es früher nicht funktioniert hat. Möglicherweise, weil ich eine ältere Version der Nachrüstung verwendet habe.
FULL
das den Körper geben soll, aber es scheint nicht.Antworten:
Ich habe es benutzt
setLogLevel(LogLevel.FULL).setLog(new AndroidLog("YOUR_LOG_TAG"))
, es hat mir geholfen.AKTUALISIEREN.
Sie können auch versuchen, Debug-Zwecke
retrofit.client.Response
als Antwortmodell zu verwendenquelle
AndroidLog
, welche Klasse ist das?response body
, obwohl es in dem Dokument angegeben ist, das Ihnen das gebenLogLevel.FULL
sollteresponse body
.Nachrüstung 2.0 :
UPDATE: @von Marcus Pöhls
Anmelden Nachrüstung 2
Retrofit 2 ist für jeden Netzwerkbetrieb vollständig auf OkHttp angewiesen. Da OkHttp eine Peer-Abhängigkeit von Retrofit 2 ist, müssen Sie keine zusätzliche Abhängigkeit hinzufügen, sobald Retrofit 2 als stabile Version veröffentlicht wird.
OkHttp 2.6.0 wird mit einem Protokollierungs-Interceptor als interne Abhängigkeit geliefert und kann direkt für Ihren Retrofit-Client verwendet werden. Retrofit 2.0.0-beta2 verwendet weiterhin OkHttp 2.5.0. Zukünftige Versionen werden die Abhängigkeit von höheren OkHttp-Versionen erhöhen. Aus diesem Grund müssen Sie den Protokollierungs-Interceptor manuell importieren. Fügen Sie Ihren Gradle-Importen in Ihrer build.gradle-Datei die folgende Zeile hinzu, um die Abhängigkeit des Protokollierungs-Interceptors abzurufen.
Sie können auch die GitHub-Seite von Square zu diesem Interceptor besuchen
Hinzufügen der Protokollierung zur Nachrüstung 2
Während der Entwicklung Ihrer App und zu Debugging-Zwecken ist es hilfreich, eine Protokollfunktion zu integrieren, um Anforderungs- und Antwortinformationen anzuzeigen. Da die Protokollierung in Retrofit 2 nicht mehr standardmäßig integriert ist, müssen wir einen Protokollierungs-Interceptor für OkHttp hinzufügen. Glücklicherweise wird OkHttp bereits mit diesem Interceptor ausgeliefert und Sie müssen ihn nur für Ihren OkHttpClient aktivieren.
Wir empfehlen, die Protokollierung als letzten Interceptor hinzuzufügen, da hierdurch auch die Informationen protokolliert werden, die Sie mit früheren Interceptors zu Ihrer Anfrage hinzugefügt haben.
Protokollebenen
Wenn Sie zu viele Informationen protokollieren, wird Ihr Android-Monitor in die Luft gesprengt. Aus diesem Grund verfügt der Protokollierungs-Interceptor von OkHttp über vier Protokollierungsstufen: NONE, BASIC, HEADERS, BODY. Wir führen Sie durch die einzelnen Protokollebenen und beschreiben deren Ausgabe.
Weitere Informationen finden Sie unter: Nachrüstung 2 - Protokollanfragen und -antworten
ALTE ANTWORT:
Keine Anmeldung mehr in Retrofit 2. Das Entwicklungsteam hat die Protokollierungsfunktion entfernt. Um ehrlich zu sein, war die Protokollierungsfunktion sowieso nicht so zuverlässig. Jake Wharton erklärte ausdrücklich, dass die protokollierten Nachrichten oder Objekte die angenommenen Werte sind und nicht als wahr nachgewiesen werden konnten. Die tatsächliche Anforderung, die am Server eintrifft, hat möglicherweise einen geänderten Anforderungshauptteil oder etwas anderes.
Obwohl standardmäßig keine integrierte Protokollierung vorhanden ist, können Sie jeden Java-Protokollierer nutzen und in einem angepassten OkHttp-Interceptor verwenden.
Weitere Informationen zu Retrofit 2 finden Sie unter: Retrofit - Erste Schritte und Erstellen eines Android-Clients
quelle
Update für Retrofit 2.0.0-beta3
Jetzt müssen Sie okhttp3 mit Builder verwenden. Auch der alte Abfangjäger wird nicht funktionieren. Diese Antwort ist auf Android zugeschnitten.
Hier ist eine schnelle Kopie zum Einfügen mit den neuen Sachen.
1. Ändern Sie Ihre Gradle-Datei in
2. Überprüfen Sie diesen Beispielcode:
mit den neuen Importen. Sie können Rx entfernen, wenn Sie es nicht verwenden, und auch entfernen, was Sie nicht verwenden.
Bonus
Ich weiß, dass es offtopisch ist, aber ich finde es cool.
Falls es einen http-Fehlercode von nicht autorisiert gibt , ist hier ein Abfangjäger. Ich benutze Eventbus zur Übertragung des Events.
Code aus https://github.com/AndreiD/UltimateAndroidTemplateRx (mein Projekt).
quelle
Es scheint keine Möglichkeit zu geben, Basic + Body auszuführen, aber Sie können FULL verwenden und die nicht gewünschten Header filtern.
Es scheint, dass dem Text beim Überschreiben des Protokolls ein ähnliches Tag vorangestellt wird
Daher sollte es einfach sein, basic + body durch Anpassen des benutzerdefinierten Filters zu protokollieren. Ich verwende eine schwarze Liste, aber je nach Ihren Anforderungen kann auch eine Whitelist verwendet werden.
quelle
Der folgende Code funktioniert sowohl mit als auch ohne Header, um die Protokollanforderung und -antwort zu drucken. Hinweis: Kommentieren Sie einfach die Zeile .addHeader (), wenn Sie keinen Header verwenden.
quelle
Ich hoffe, dieser Code hilft Ihnen bei der Protokollierung.
Sie müssen nur Interceptor in Ihrem
Build.Gradle
dann machen hinzufügenRetrofitClient
.Erster Schritt
Fügen Sie diese Zeile zu Ihrem hinzu
build.gradle
Zweiter Schritt
Machen Sie Ihren Retrofit-Client
Berufung
quelle
Wenn Sie Retrofit2 und okhttp3 verwenden, müssen Sie wissen, dass Interceptor nach Warteschlange arbeitet. Fügen Sie also am Ende nach Ihren anderen Interceptors loggingInterceptor hinzu:
quelle
ZoomX - Android Logger Interceptor ist ein großartiger Interceptor, der Ihnen bei der Lösung Ihres Problems helfen kann.
quelle
Für Android Studio vor 3.0 (mit Android Motinor)
https://futurestud.io/tutorials/retrofit-2-log-requests-and-responses
https://www.youtube.com/watch?v=vazLpzE5y9M
Und für Android Studio ab 3.0 und höher (Android Profiler als Android Monitor wird durch Android Profiler ersetzt)
https://futurestud.io/tutorials/retrofit-2-analyze-network-traffic-with-android-studio-profiler
quelle