2016-12-22 7 views
3

こんにちは、私はこの改造に取り組んでいます。いずれにしても私は手伝ってください。私は改造のヘッダーを渡すために非常に多くの方法を試みましたが、私はRetrofit 2.0 build.gradleヘッダーをRetrofit 2.1.0に渡す方法

compile 'com.google.code.gson:gson:2.6.2' 
compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.okhttp3:logging-interceptor:3.3.1' 
compile 'com.squareup.okhttp:okhttp:2.7.2' 
compile 'com.squareup.retrofit2:converter-gson:2.1.0' 

そして

 import okhttp3.Interceptor; 
     import okhttp3.OkHttpClient; 
     import okhttp3.Request; 
     import okhttp3.Response; 
     import retrofit2.Retrofit; 
     import retrofit2.converter.gson.GsonConverterFactory; 

     public class ApiClientHeader { 

     public static final String BASE_URL = "URL"; 
     private static Retrofit retrofit = null; 


     public static Retrofit getClient(final String token) { 


      OkHttpClient okClient = new OkHttpClient.Builder() 
        .addInterceptor(
          new Interceptor() { 
           @Override 
           public Response intercept(Interceptor.Chain chain) throws IOException { 
            Request original = chain.request(); 

            // Request customization: add request headers 
            Request.Builder requestBuilder = original.newBuilder() 
              .header("Authorization", "Bearer " + token) 
              .method(original.method(), original.body()); 

            Request request = requestBuilder.build(); 
            return chain.proceed(request); 
           } 
          }) 
        .build(); 


      if (retrofit == null) { 
       retrofit = new Retrofit.Builder() 
         .baseUrl(BASE_URL) 
         .client(okClient) 
         .addConverterFactory(GsonConverterFactory.create()) 
         .build(); 
      } 
      return retrofit; 
     } 

    } 

そして、私の ApiInterface.javaで ApiClientHeader.javで0.1

@GET("profile") 
Call<JsonObject> getProfile(); 

そして、私の活動では、私はちょうどまだ私は403回の不正なアクセスもを取得しています

private void getProfileData() 
    { 
     Singleton single = new Singleton(); 
     String auth = single.getAuthorization(); 

     Log.d("===========>>>>>>",auth); 


     ApiInterface apiService = 
       ApiClientHeader.getClient(auth).create(ApiInterface.class); 
     //showProgress(true); 
     Call<JsonObject> profileResponse = apiService.getProfile(); 
     profileResponse.enqueue(new Callback<JsonObject>() { 
      @Override 
      public void onResponse(Call<JsonObject> call, Response<JsonObject> response) { 

       //showProgress(false); 

       Log.d("============>"," Call Request " +String.valueOf(call.request().toString())); 
       Log.d("============>", " Response code " + String.valueOf(response.code())); 
//    Log.d("============>", " Response Body " + String.valueOf(response.body().toString())); 

       if(response.code() == HttpURLConnection.HTTP_OK) 
       { 

       } 

      } 

      @Override 
      public void onFailure(Call<JsonObject> call, Throwable t) { 

       //showProgress(false); 
       Log.d("============>"," Call Request " +String.valueOf(call.request().toString())); 
       Log.d("============>"," Call Request " +String.valueOf(call.request().headers())); 
       Log.d("=======>", "Failure" + t.getMessage()); 
      } 

     }); 
    } 

関数を呼び出しています。 ここでは、データの送受信にPOJOクラスを使用していません。私を助けてください。

+0

のようにヘッダーを追加します。 getProfile(@Header( "Authorization")String header); –

答えて

0
@Headers({ 
    "Accept: application/vnd.github.v3.full+json", 
    "User-Agent: Retrofit-Sample-App" 
}) 
@GET("users/{username}") 
Call<User> getUser(@Path("username") String username); 

documentation

+0

私はこれを私のコードで修正してくださいしてください私のエラーで識別することができますが表示されます – Anil

1

詳細あなたはこの

@GET("profile") 
Call<JsonObject> getProfile((@Header("Authorization") String authorization)) 
-1

のようなあなたの認証文字列を渡す必要がありそれは私のために働いている、あなたのクラスでのコードの下に試してみてください。

final RestAdapter restAdapter = new RestAdapter.Builder().setClient(client).setLogLevel(RestAdapter.LogLevel.FULL).setRequestInterceptor(new RequestInterceptor() { 

      @Override 
      public void intercept(RequestFacade requestFacade) { 
       requestFacade.addHeader("key", "value"); 
       requestFacade.addHeader("X-Requested-With", "XMLHttpRequest"); 
      } 
     }).setConverter(new GsonConverter(gson)).setEndpoint(context.getString(R.string.base_url)).build(); 

E DITポスト:

public class RestClient { 

    // private static final String BASE_URL = "http://api.plumperfect.com"; 
    private WebServicesInterface apiService; 
    private static RestClient instance; 

    public RestClient(Context context) { 
     instance = this; 
     final Gson gson = new GsonBuilder().registerTypeAdapterFactory(new ItemTypeAdapterFactory()).setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'").create(); 
     // final int cacheSize = 10 * 1024 * 1024; // 10 MiB 
     // final File cacheDirectory = new File(context.getCacheDir().getAbsolutePath(), "HttpCache"); 
     // final OkHttpClient client = new OkHttpClient(); 
     // Cache cache; 
     // try { 
     // cache = new Cache(cacheDirectory, cacheSize); 
     // client.setCache(cache); 
     // } catch (IOException e) { 
     // e.printStackTrace(); 
     // } 


     final OkHttpClient okHttpClient = new OkHttpClient(); 

     final Client client = new OkClient(okHttpClient); 

     final RestAdapter restAdapter = new RestAdapter.Builder().setClient(client).setLogLevel(RestAdapter.LogLevel.FULL).setRequestInterceptor(new RequestInterceptor() { 

      @Override 
      public void intercept(RequestFacade requestFacade) { 
         requestFacade.addHeader("key", "value"); 
       requestFacade.addHeader("X-Requested-With", "XMLHttpRequest"); 
      } 
     }).setConverter(new GsonConverter(gson)).setEndpoint(context.getString(R.string.base_url)).build(); 

     apiService = restAdapter.create(WebServicesInterface.class); 
    } 

    public WebServicesInterface getApiService() { 
     return apiService; 
    } 

    public static RestClient getInstance() { 
     return instance; 
    } 

} 

Secoundクラス:

public class ItemTypeAdapterFactory implements TypeAdapterFactory { 

    @Override 
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { 
     final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type); 
     final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class); 

     return new TypeAdapter<T>() { 

      public void write(JsonWriter out, T value) throws IOException { 
       delegate.write(out, value); 
      } 

      public T read(JsonReader in) throws IOException { 

       JsonElement jsonElement = elementAdapter.read(in); 
       if (jsonElement.isJsonObject()) { 
        JsonObject jsonObject = jsonElement.getAsJsonObject(); 
        if (jsonObject.has(Constants.DATA) && jsonObject.get(Constants.DATA).isJsonObject()) { 
         jsonElement = jsonObject.get(Constants.DATA); 
        } 
       } 

       return delegate.fromJsonTree(jsonElement); 
      } 
     }.nullSafe(); 
    } 

} 
+0

これを追加する方法簡単な情報を与えることができます – Anil

+0

私の投稿で私のクラスを共有している。 –

0

私はあなたがNetworkInterceptorを追加することができますToken based authentication using Retrofit 1.9 + OkHttp 2.4

ための最良のリンクのいずれかを見つけ、私のような私のデモでそれを使用しています:

httpClient.addNetworkInterceptor(new Interceptor() { 
     @Override 
     public Response intercept(Chain chain) throws IOException { 

      Request originalRequest = chain.request(); 

      // Add authorization header with updated authorization value to intercepted request 
      Request authorisedRequest = originalRequest.newBuilder() 
        .header("Authorization", AccountAuthenticator.getAccessTokenWithTokenType(mContext)) 
        .build(); 
      return chain.proceed(authorisedRequest); 
     } 
    }); 

依存関係:

compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.retrofit2:converter-gson:2.1.0' 
compile 'com.google.code.gson:gson:2.8.0' 
compile 'com.squareup.okhttp3:logging-interceptor:3.3.1' 

ありがとう。

+0

私にこの依存関係を教えてもらうことができます – Anil

+0

依存関係を使って答えを更新しました。 –

+0

必須:okHttp3.OkHttpClient – Anil

関連する問題