Ich bin sicher, dass es bereits eine Antwort auf meine Frage gibt, aber ich verstehe ihre Antwort nicht (und bin nicht zuversichtlich, meinen Code x 'zu ändern)))Von Retrofit onResponse, holen Sie eine Feldantwort zurück und benutzen Sie sie wieder
So wie der Titel sagt, ich benutze Retrofit, kann ich die API aufrufen, ich habe die Antwort. Aber danach will ich ein Feld aus der Antwort abzurufen, um es später zu verwenden (wie ein Token mehr API-Aufruf benötigt tun)
Hier ist der Code in Frage:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.orange.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiService service = retrofit.create(ApiService.class);
String userName = "lCjTF83Ul61a0UXe0NSWcW459pnUDXQE";
String passWord = "AGCEGvixfiAA513P";
String base = userName + ":" + passWord;
String grant_type = "client_credentials";
String authHeader = "Basic " + Base64.encodeToString(base.getBytes(), Base64.NO_WRAP);
Call<Authentification> authentificationCall = service.getTokenAccess(authHeader, grant_type);
authentificationCall.enqueue(new Callback<Authentification>() {
@Override
public void onResponse(Call<Authentification> call, Response<Authentification> response) {
int statusCode = response.code();
Authentification authentification = response.body();
Log.d(TAG, "onResponse: " + statusCode);
}
@Override
public void onFailure(Call<Authentification> call, Throwable t) {
Log.d(TAG, "onFailure: " + t.getMessage());
}
});
}
Und der Code der Antwort:
public class Authentification {
@SerializedName("token_type")
@Expose
private String tokenType;
@SerializedName("access_token")
@Expose
private String accessToken;
@SerializedName("expires_in")
@Expose
private String expiresIn;
public String getTokenType() {
return tokenType;
}
public void setTokenType(String tokenType) {
this.tokenType = tokenType;
}
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(String expiresIn) {
this.expiresIn = expiresIn;
}
}
Also in der Antwort gibt es ein Feld "access_token", das ich möchte.
Ich wollte so etwas tun: (nach dem Log.d in onResponse)
final String abc = response.body().getAccessToken();
Aber dann will ich es in der anderen Klasse verwenden, in der anderen Nachrüst-Instanz
private void AppelReseauNRJ(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.orange.com/orangeradio/v1/radios/nrj/")
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiRadioList service1 = retrofit.create(ApiRadioList.class);
String Zetoken = "Bearer " + ;
Call<GetStream> listRadioCall = service1.getRadio(Zetoken);
listRadioCall.enqueue(new Callback<GetStream>() {
@Override
public void onResponse(Call<GetStream> call, Response<GetStream> response) {
int statusCode = response.code();
GetStream getStream = response.body();
Log.d (TAG, "onResponse: " + statusCode);
}
@Override
public void onFailure(Call<GetStream> call, Throwable t) {
Log.d(TAG, "onFailure: " + t.getMessage());
}
});
}
(Genau dort, wo Zetoken ist)
können Sie mir einige Gedankenlinie, eine Idee?
Thx (Ich werde auf Ihre Antwort nach dem Mittagessen sehen)
ich versuche deine lösung und sieht gut aus, wenn ich auf debug-modus schaue, habe ich die gute header. Ich muss einen Fehler beheben, der angezeigt wird (java.lang.IllegalStateException: Expected BEGIN_OBJECT aber war BEGIN_ARRAY in Zeile 1 Spalte 2 Pfad $ "Ich werde es untersuchen, und komme zurück, wenn es funktioniert Thx :) –
So Ich habe mein Problem gelöst und Ihre Methode funktioniert PERFEKT: D - THX –