Как добавить токен доступа к заголовкам в MVP Pattern - PullRequest
0 голосов
/ 31 августа 2018

Я использую MVP Pattern для своего приложения для Android, мне нужно добавить токен доступа в заголовки моего запроса. Токен доступа сохранен в SharedPreferences. Как получить доступ к этому шаблону SharedPreferences в MVP. Я использую Retrofit для сетевого запроса.

public class RetrofitInstance {

    private static Retrofit retrofit;
    private static final String BASE_URL = "http://123124.ngrok.io/api/";


    public static Retrofit getRetrofitInstance() {
        if (retrofit == null) {

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

                    Request request = chain.request();
                    Request.Builder newRequest = request.newBuilder().addHeader("Authorization", "Bearer "); //need to add value from SharedPreferences

                    return chain.proceed(newRequest.build());
                }
            });

            retrofit = new retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(okhttpBuilder.build())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }

}

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы можете использовать приложение Context

Попробуйте вот так

  public class RetrofitInstance {

    private static Retrofit retrofit;
    private Context context;
    private static final String BASE_URL = "http://123124.ngrok.io/api/";

     public void init(Context context) {
          this.context = context;
     }

    public static Retrofit getRetrofitInstance() {
        if (retrofit == null) {

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

                    Request request = chain.request();
                    //use context
                    Request.Builder newRequest = request.newBuilder().addHeader("Authorization", "Bearer "); //need to add value from SharedPreferences

                    return chain.proceed(newRequest.build());
                }
            });

            retrofit = new retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(okhttpBuilder.build())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }

}

и в классе приложений

public class YourApplication extends Application {

 @Override
    public void onCreate() {
        super.onCreate();
         RetrofitInstance.getRetrofitInstance().init(getApplicationContext());
         }
   }
0 голосов
/ 31 августа 2018

Попробуйте:

private static Retrofit authRetrofit = null;        

public static Retrofit getAuthClient(Context context) {
                    if (authRetrofit == null) {
                        final AuthSharedPref authSharedPref = new AuthSharedPref(context);
                        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
                        httpClient.addInterceptor(new Interceptor() {
                            @Override
                            public Response intercept(@NonNull Chain chain) throws IOException {
                                Request request = chain.request().newBuilder().addHeader("Authorization", "Bearer "+authSharedPref.getToken()).build();
                                return chain.proceed(request);
                            }
                        });

                      authRetrofit= new retrofit2.Retrofit.Builder()
                     .baseUrl(BASE_URL)
                     .client(okhttpBuilder.build())
                     .addConverterFactory(GsonConverterFactory.create())
                     .build();
                    }
                    return authRetrofit;
}

Здесь AuthSharedPref - это класс общих настроек, в котором хранятся данные для входа в систему, вы можете изменить его на свой собственный.

...