Что ж, лучший подход - это обернуть ваш класс предпочтений во вспомогательный класс и использовать Dagger , чтобы внедрить его туда, где вам нужно, чтобы ваш докладчик / модель не должен был знать о контексте.
Например, у меня есть модуль приложения, который предоставляет различные синглтоны, одним из которых является мой класс Preferences Util, который имеет дело с общими настройками.
@Provides
@Singleton
public PreferencesUtil providesPreferences(Application application) {
return new PreferencesUtil(application);
}
Теперь, когда я захочу его использовать, я просто @Inject:
@Inject
PreferencesUtil prefs;
Я думаю, что обучение стоит того, поскольку ваш проект MVP будет более отсоединенным.
Однако, если вы хотите забыть о правиле «Ведущий не знает о контексте Android», вы можете просто добавить метод getContext в интерфейс представления и получить контекст из представления:
public interface MainActivityMVP {
public interface Model{
}
public interface View{
boolean isPnTokenRegistered();
Context getContext();
}
public interface Presenter{
}
}
А потом:
public void sendDataToServer() {
Context context = view.getContext();
}
Я видел, как некоторые люди используют MVP таким образом, но я лично предпочитаю использовать Dagger.
Вы также можете использовать приложение conext, как это предлагается в комментариях.