Как получить контекст приложения в перехватчиках

Я хочу использовать перехватчик okhttp (сборка внутри класса модернизации) для добавления журналов в часовой, где можно добавить несколько тегов вместе с ошибкой, например, я добавляю пользователя (имя), который обрабатывал приложение (которое хранится в общих настройках) с помощью пример кода вроде eventBuilder.withTag(SentryConstants.TYPE_CUSTOMER_NAME, customer.getFirstname());

У меня есть статический класс Retrofit, чтобы я мог построить его один раз и использовать для каждого вызова api, поскольку для доступа к пользователю мне нужен контекст приложения для общих предпочтений, у меня есть 3 способа добавления журналов

1) из действия, в котором я вызываю контекст передачи api с помощью getApplicationContext() для модификации класса

  • Это заставляет меня создать нестатический класс, поскольку мне нужно передать контекст в качестве параметра

2) перед тем, как сделать вызов api (retrofit) в действии, я могу зарегистрировать его в часовом

  • Я получаю преимущество от статического модернизированного класса, но теряю централизованную систему ведения журнала (я должен быть уверен, что регистрирую его каждый раз)

3) создайте статический класс с контекстом, как указано здесь

  • Не рекомендуемый способ, также в будущем у меня могут быть другие варианты, фрагмент которых вызывает api

Какой будет рекомендуемый подход

Мы делаем это с помощью внедрения зависимостей через Dagger 2, а затем вводим настройки, а не приложение Context. Кроме того, нет проблем с предоставлением приложения Context, если вы уверены, что это приложение Context, а не ActivityContext, поскольку приложение Context не может быть пропущено, поскольку это весь ваш процесс, поэтому, когда Android решает убить ваше приложение, оно будет убито, а приложение Context будет обработано сборщиком мусора, несмотря ни на что :-)

Darwind 31.10.2018 12:33

@Darwind получил это спасибо, я создал статический абстрактный класс, который расширяет Application

kobe24 31.10.2018 13:00

Просто помните, что если вы хотите провести модульное тестирование этого фрагмента кода (Interceptor), у вас возникнут проблемы, потому что вы отправляете Application, а Application не существует вне контекста Android.

Darwind 31.10.2018 13:22
0
3
879
0

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