2016-05-25 9 views
0

私はandroid.nに新規です。retrofitを使用してapi_keyのヘッダを追加する方法を教えてください。私はこれをどのように行うことができるのか理解できません。api_keyでapi_keyを使ってアクセスする方法

私はこのコードをnet.whereから見つけます。私はこのコードをアンドロイドフォルダ構造に入れなければなりません。私はthis.andと混乱しています。私はapi_keyを追加する必要があります。

// Define the interceptor, add authentication headers 
Interceptor interceptor = new Interceptor() { 
    @Override 
    public okhttp3.Response intercept(Chain chain) throws IOException { 
    Request newRequest = chain.request().newBuilder().addHeader("User-Agent", "Retrofit-Sample-App").build(); 
    return chain.proceed(newRequest); 
    } 
}; 

// Add the interceptor to OkHttpClient 
OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
builder.interceptors().add(interceptor); 
OkHttpClient client = builder.build(); 

// Set the custom client when building adapter 
Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("https://api.github.com") 
    .addConverterFactory(GsonConverterFactory.create()) 
    .client(client) 
    .build(); 
+0

'addHeader'メソッドは、「api_keyのヘッダを追加する」ように見えます。 –

+0

ここでアンドロイド構造体にこのコードを書く必要がありますか? – dev

+0

私はあなたが "構造"の意味を理解していない...どこでもJavaファイル内で、実際には動作します –

答えて

0

あなたはこのようなあなたのstrings.xmlファイルであなたのAPI_KEYを保存することができます。

<string name="your_api_key_id" translatable="false">YOUR_API_KEY</string> 

次に、あなたのOkHttpClient定義クラスでは、そのようなあなたのOkHttpClientを構築する方法を記述します。

private final static String API_KEY_IDENTIFIER = "key_identifier"; 

private OkHttpClient getHttpClient(){ 
     OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 
     httpClient.addInterceptor(new Interceptor() { 
      @Override 
      public Response intercept(Chain chain) throws IOException { 
       Request original = chain.request(); 
       HttpUrl originalUrl = original.url(); 
       HttpUrl url = originalUrl.newBuilder() 
         .addQueryParameter(API_KEY_IDENTIFIER, mContext.getString(R.string.your_api_key_id)) 
         .build(); 
       Request.Builder requestBuilder = original.newBuilder().url(url); 
       Request request = requestBuilder.build(); 
       return chain.proceed(request); 
      } 
     }); 
     return httpClient.build(); 
    } 

シングルトンパターンでクライアントビルダークラスを実装して、コード内の1か所にクライアントビルドを集中させる必要があります

関連する問題