Ich verwende OAuth und muss das OAuth-Token jedes Mal in meinen Header einfügen, wenn ich eine Anfrage stelle. Ich sehe die @Header
Anmerkung, aber gibt es eine Möglichkeit, sie zu parametrisieren, damit ich sie zur Laufzeit übergeben kann?
Hier ist das Konzept
@Header({Authorization:'OAuth {var}', api_version={var} })
Können Sie sie zur Laufzeit weitergeben?
@GET("/users")
void getUsers(
@Header("Authorization") String auth,
@Header("X-Api-Version") String version,
Callback<User> callback
)
java
android
annotations
retrofit
jpotts18
quelle
quelle
Antworten:
Neben der Verwendung des Parameters @Header würde ich lieber RequestInterceptor verwenden, um alle Ihre Anforderungen zu aktualisieren, ohne Ihre Benutzeroberfläche zu ändern. Verwenden Sie so etwas wie:
p / s: Wenn Sie Retrofit2 verwenden, sollten Sie
Interceptor
anstelle von verwendenRequestInterceptor
Da
RequestInterceptor
ist in Retrofit 2.0 nicht mehr verfügbarquelle
RestAdapter
hängt von Retrofit1 ab, in Retrofit2 ist esRetrofit
. Ich werde Retrofit2 verwenden, also keine Probleme, wennRequestInterceptor
wie oben beschriebener Code verwendet wird?Ja, Sie können sie zur Laufzeit übergeben. In der Tat ziemlich genau so, wie Sie es abgetippt haben. Dies wäre in Ihrer API-Schnittstellenklasse mit dem Namen SecretApiInterface.java
Dann übergeben Sie die Parameter aus Ihrer Anfrage an diese Schnittstelle, ungefähr so : (Diese Datei wäre zum Beispiel SecretThingRequest.java )
Wo
Somehow.Magically.getToken()
ein Methodenaufruf ein Token zurückgibt, liegt es an Ihnen, wo und wie Sie es definieren.Sie können natürlich mehr als eine
@Header("Blah") String blah
Anmerkung in der Schnittstellenimplementierung haben, wie in Ihrem Fall!Ich fand es zu verwirrend, die Dokumentation deutlich sagt , es ersetzt die Header, aber es DOES NOT !
Es wird tatsächlich wie bei einer
@Headers("hardcoded_string_of_liited_use")
Anmerkung hinzugefügtHoffe das hilft ;)
quelle
Die akzeptierte Antwort gilt für eine ältere Version von Retrofit. Für zukünftige Betrachter besteht die Möglichkeit, dies mit
Retrofit
2.0 zu tun, in der Verwendung eines benutzerdefinierten OkHttp-Clients:Hoffe es hilft jemandem. :) :)
quelle
Interceptor
auf den Sie den Interceptor zu einem späteren Zeitpunkt einstellen oder zurücksetzen können. Ich würde jedoch argumentieren, dass eine Nachrüstung als Singleton ein Zeichen für eine frühzeitige Optimierung sein kann. Das Erstellen einer neuen Nachrüstinstanz ist kein Aufwand: github.com/square/retrofit/blob/master/retrofit/src/main/java/…Interceptor
s nicht hinzufügen oder entfernen, nachdem Sie eine Retrofit2-Instanz erstellt hatten.Nachrüstung 2.3.0
Ich benutze dies, um eine Verbindung zu GitHub herzustellen.
quelle