2017-08-11 4 views
0

私はすでに自分の質問に対する回答があることを前提にしていますが、私は本当にその答えを理解していません(そして、 ))更新時のonResponseから、フィールド回答を取得して再度使用する

タイトルには、私が改造を使用していると書いてあるので、私はAPIを呼び出すことができます。答えがあります。

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()); 

      } 


     }); 
    } 

: しかし、その後、私はここで

(より多くのAPI呼び出しを行うために必要なトークンのように)後でそれを使用するために、その答えから一つのフィールドを取得するには、問題のコードですと答えのコード:

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; 
    } 

}

それで、答えには "access_token"というフィールドがあります。 (onResponseでLog.d後)

final String abc = response.body().getAccessToken(); 

しかし、私は他の改造インスタンス

で、他のクラスでそれを使用したい:

は、私はそのような何かをやってみたかったです

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()); } }); } 

(Zetokenがある場所を正確に)

あなたは私の思考のいくつかの行、いくつかのアイデアを与えることはできますか?あなたは、後で使用するためSharedPreferenceにトークンを保存することができます

Thxを(私は昼食後、あなたの答えを見てみましょう)

答えて

2

。ログインAPI結果で

、あなたのアクセスを保存トークン

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

あなたが(別のアクティビティに)必要な今までにときに、このトークンを取得します。

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

私はあなたのソリューションを試してみるといいです、私はデバッグモードを見て、私は良いヘッダーがあります。 表示されるエラーを解決する必要があります(java.lang.IllegalStateException:BEGIN_OBJECTが必要ですが、BEGIN_ARRAYは1行目の2行目のパスです。 "これを調べ、問題がなければ返信します。 Thx :) –

+0

So私は私の問題を修正し、あなたの方法は完全に機能します:D - THX –

関連する問題