2017-08-11 1 views
0

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)

Antwort

2

Sie Ihr Token in SharedPreference für eine spätere Verwendung speichern.

In Ihrem api Ergebnis Login, Speichern Sie Ihre Zugriffstoken

SharedPreferences preferences=getSharedPreferences("myPref",MODE_PRIVATE); 
SharedPreferences.Editor editor= preferences.edit(); 
editor.putString("token", response.body().getAccessToken()); 
editor.apply(); 

dieses Token abrufen, wann immer Sie (in einer anderen Aktivität) benötigen.

SharedPreferences preferences=getSharedPreferences("myPref", Context.MODE_PRIVATE); 
String token = preferences.getString("token",""); 
+0

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 :) –

+0

So Ich habe mein Problem gelöst und Ihre Methode funktioniert PERFEKT: D - THX –

Verwandte Themen