Можно ли передать строку в интерфейс? Или, по крайней мере, получить из SharedPreferences внутри интерфейса?

Я пытаюсь получить сохраненный JWT из SharedPreferences, чтобы я мог отправить их в качестве заголовка в моем запросе, но я не могу получить эти данные внутри интерфейса API. Это возможно?

Спасибо


РЕШЕНО:

Для тех, кто ищет это: вы можете передать заголовок в качестве параметра, например:

@FormUrlEncoded
@POST("users/getUser")
Call<String> getUser(
        @Header("Token") String token,
        @Field("user") String user
);

Какую библиотеку вы используете для работы в сети?

beigirad 05.01.2019 21:15

Я использую retrofit2, но обнаружил, что могу передать заголовок в качестве параметра

user8871219 05.01.2019 21:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
29
1

Ответы 1

также вы можете использовать встроенный Interceptor для добавления этого токена во ВСЕ запросы, например:

public class AuthInterceptor
    implements Interceptor {
@Override
public Response intercept(Chain chain)
        throws IOException {
    Request request = chain.request();
    request = request.newBuilder()
            .addHeader("Token", new MySharedPref().getToken())
                .build();
        return chain.proceed(request);
    }
}

и после этого добавьте его экземпляр на свой OkHttpClient:

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addNetworkInterceptor(new AuthInterceptor());
Retrofit retrofit = new Retrofit.Builder()
       ...
        .client(httpClient.build())

        .build();

Выглядит круто. Но дело в том, что теперь я всегда использую токен авторизации

user8871219 05.01.2019 21:41

Другие вопросы по теме