Ich habe diesen Interceptor, den ich meinem OkHttp-Client hinzufüge:
public class RequestTokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// Here where we'll try to refresh token.
// with an retrofit call
// After we succeed we'll proceed our request
Response response = chain.proceed(request);
return response;
}
}
Wie kann ich Header hinzufügen, um sie in meinem Interceptor anzufordern?
Ich habe es versucht, aber ich mache einen Fehler und ich verliere meine Anfrage beim Erstellen einer neuen Anfrage:
public class RequestTokenInterceptor implements Interceptor {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
Request newRequest;
try {
Log.d("addHeader", "Before");
String token = TokenProvider.getInstance(mContext).getToken();
newRequest = request.newBuilder()
.addHeader(HeadersContract.HEADER_AUTHONRIZATION, O_AUTH_AUTHENTICATION + token)
.addHeader(HeadersContract.HEADER_CLIENT_ID, CLIENT_ID)
.build();
} catch (Exception e) {
Log.d("addHeader", "Error");
e.printStackTrace();
return chain.proceed(request);
}
Log.d("addHeader", "after");
return chain.proceed(newRequest);
}
}
Beachten Sie, dass ich weiß, dass ich beim Erstellen einer Anfrage wie folgt einen Header hinzufügen kann:
Request request = new Request.Builder()
.url("https://api.github.com/repos/square/okhttp/issues")
.header("User-Agent", "OkHttp Headers.java")
.addHeader("Accept", "application/json; q=0.5")
.addHeader("Accept", "application/vnd.github.v3+json")
.build();
Aber es passt nicht zu meinen Bedürfnissen. Ich brauche es in Abfangjäger.
Antworten:
Schließlich habe ich die Überschriften folgendermaßen hinzugefügt:
quelle
.addheader(params1, params2);
Sie können es auf diese Weise tun
quelle
Hier ist eine nützliche Zusammenfassung von lfmingo
quelle
Wenn Sie die Retrofit-Bibliothek verwenden, können Sie den Header
@Header
ohne Verwendung von Interceptor mithilfe von Anmerkungen direkt an die API-Anforderung übergeben . Das folgende Beispiel zeigt, wie Sie der Retrofit-API-Anforderung einen Header hinzufügen.Ich hoffe es hilft!
quelle
Diese Kotlin-Klasse hatte ähnliche Probleme mit anderen Beispielen und arbeitete für mich
quelle
Es gibt noch eine andere Möglichkeit, Interceptors in Ihrem OkHttp3 hinzuzufügen (neueste Version ab sofort), nämlich das Hinzufügen der Interceptors zu Ihrem Okhttp-Builder
und schließlich erstellen Sie Ihren okHttpClient aus diesem Builder
quelle
add*Network*Interceptor
anstattaddInterceptor
mich ein paar Stunden lang an den Haaren ziehen zu lassen :)Anwendungsbeispiel:
quelle
quelle
Das hat bei mir funktioniert:
quelle