Подтвердить что ты не робот

Где должны быть записаны вызовы службы android для GoogleAPIClient при использовании шаблона MVP в android?

Я пытаюсь реализовать шаблон MVP в моем проекте Android, обратившись к этой ссылке: https://github.com/jpotts18/android-mvp

Я успешно реализовал классы view/presenter/interactiveor. Я не понимаю на

  • Где разместить код вызова service?

Так как я не могу получить контекст внутри презентатора или интерактора класс, я не могу отправить вызов service там

  • Где реализовать класс GoogleApiClient?

Так как GoogleApiClient также требует контекста для запуска, он также не может быть реализованный внутри презентатора или интерактора без контекста

4b9b3361

Ответ 1

Использование кинжала упрощает инжекцию Interactor на презентаторе. Попробуйте эту ссылку (https://github.com/spengilley/AndroidMVPService)

Я пытаюсь добиться этого без кинжала. Но это, похоже, нарушает архитектуру MVP.

Из Activity я создал экземпляр Interactor. Затем создайте экземпляр Presenter с Interactor как один из параметров.

активность

public class SomeActivity extends Activity implements SomeView {
   private SomePresenter presenter;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      SomeInteractor interactor = new SomeInteractorImpl(SomeActivity.this);
      presenter = new SomePresenterImpl(interactor,this);
   }

   @Override
   protected void onStart() {
     super.onStart();
     presenter.startServiceFunction();
   }

Presenter

public interface SomePresenter {
   public void startServiceFunction();
}

Реализация презентатора

public class SomePresenterImpl implements SomePresenter {
   private SomeInteractor interactor;
   private SomeView view;
   public SomePresenterImpl(SomeInteractor interactor,SomeView view){
      this.interactor = interactor;
      this.view = view;
   }
   @Override
   public void startServiceFunction() {
      interactor.startServiceFunction();
   }
}

Interactor

public interface SomeInteractor {
   public void startServiceFunction();
}

Внедрение Interactor

public class SomeInteractorImpl implements SomeInteractor {
   private Context context;

   public SomeInteractorImpl(Context context) {
      this.context = context;
   }

   @Override
   public void startServiceFunction() {
      Intent intent = new Intent(context, SomeService.class);
      context.startService(intent);
   }
}

Ответ 2

Я также ищу свой первый вопрос. Однако у меня есть ответ на второй вопрос.

Ответ - Dagger2. (http://google.github.io/dagger/) Вы можете легко ввести объект GoogleApiClient с помощью Dagger2.