Я хочу использовать authorization
в Retrofit2
. Я выбрал interceptor
способ, потому что почти все методы требуют authorization
, кроме одного, где я получаю токен для дальнейшего использования с другими методами.
Мой вопрос: Как мне этого добиться?
Я храню свой токен доступа в SharedPreferences
. Моей первой идеей было: « Я могу получить его в своем классе RetrofitClient
, и в зависимости от того, является ли токен нулевым или имеет значение, создайте подходящий Retrofit
экземпляр » (с добавлением или без добавления .client()
к нему.
К сожалению, это не так просто, потому что Context
необходим для получения настроек.
Я не знаю, как передать его в RetrofitClient
класс или как добраться до него внутри.
Вот мой RetrofitClient
класс:
public class RetrofitClient {
public static final String BASE_URL = "http://localhost";
public static Retrofit retrofit = null;
private RetrofitClient() {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
//.client(getRequestHeader())
.build();
}
/*OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request newRequest = chain.request().newBuilder()
.addHeader("Authorization", "Bearer" + )
}
})*/
public static synchronized Retrofit getInstance() {
if (retrofit == null) {
retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create()).build();
}
return retrofit;
}
public Api getApi() {
return retrofit.create(Api.class);
}
}
Мой getRequestHeader()
- предыдущий метод, в котором я устанавливал тайм-аут.
Я хочу создать экземпляр следующим образом:
private RetrofitClient() {
tokenService.token = null;
tokenService.readToken(ApplicationContext.getInstance());
if (tokenService.token == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
} else {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client) //I have interceptor here with access token
.build();
}
}
А потом:
RetrofitClient.getInstance().create(Api.class).getToken()
// получение токена
RetrofitClient.getInstance().create(Api.class).someMethod()
// когда я получаю токен
Это хороший подход?