Android MVP: обработка всех исключений внутри класса докладчика - PullRequest
1 голос
/ 29 сентября 2019

Я внедряю приложение для Android в архитектуре MVP.

Я сохраняю ссылку для просмотра внутри моего докладчика и выполняю трудоемкие задачи, такие как загрузка из сети внутри моей модели.

Моя проблема в том, что при каждом вызове в моем презентаторе, который я хочу вызвать методом View, может случиться так, что представление уже разрушено и его ссылка установлена ​​в null внутри презентатора.

Поэтому, когда я получал результаты от модели, перед каждым вызовом, таким как mView.updateUISomehow(), нужно добавить if (mView!=null), поскольку, когда управление достигает этой точки, может случиться, что mView будет нулевым.

Iхочу знать, есть ли какие-либо методы, которые я пропускаю всю проверку на ноль и обрабатываю все возможные исключения класса презентатора в обработчике исключений для всего класса.

PS Я знаю о MVVM, LiveData и Room,Я хочу решить эту проблему:)

1 Ответ

1 голос
/ 29 сентября 2019
BasePresenter<View>{
  View view

  updateUI(){
   if(view != null)
      callUI()
  }

  abstract callUI();
}

Ваш контроллер будет знать updateUI(), вы можете выбрать, как справиться с этим

YourPresenter<ThatElusiveview> extends BasePresenter<ThatElusiveEview>{


  callUI(){
   // hoping this is not directly called from the controller!!
  } 
}

Я столкнулся с той же проблемой, когда использовал MVP со слишком многими вызовами обновления пользовательского интерфейса, которыепроизойдет в реальных сценариях.Хорошо сделали рефакторинг для Jet pack.Я понимаю вашу дилемму.Я полагаю, что это выполнимо, если вы предоставляете Presenter слушателя для просмотра, поэтому, если представление разрушается, Presenter будет удерживать связь от контроллера к View.

это похоже на проверку представления! = Null, но выможет иметь перечисления различных типов обновлений, идущих от докладчика к представлению.который вы можете поместить в одном месте для проверки, а затем направить их в соответствующий метод обновления в зависимости от типа действия перечисления.Это также поможет прочитать код, касающийся различных действий, которые докладчик может отправлять в View

.
...