Ошибка сборки кастомного Presenter
JorikFat opened this issue · comments
Осваиваю эту библиотеку и пробую сделать кастомный Presenter
Presenter:
@InjectViewState
public class MainPresenter extends MvpPresenter<MainView> {
DbHandler dbHandler;
public MainPresenter(DbHandler dbHandler) {
this.dbHandler = dbHandler;
}
Activity:
public class MainActivity extends MvpAppCompatActivity implements MainView {
private Button timeStamp;
private RecyclerView listTimestamp;
private TimeStampAdapterRV adapterRV;
private DbHandler dbHandler = new DbHandler(this);
@InjectPresenter MainPresenter presenter;
@ProvidePresenter
MainPresenter createMainPresenter(DbHandler handler){
return new MainPresenter(handler);
}
Получаю ошибку:
error: method createMainPresenter in class MainActivity cannot be applied to given types;
required: DbHandler
found: no arguments
reason: actual and formal argument lists differ in length
А ошибка прям в таком формате и выводится? И это вы делаете обычный run?
Ошибку исправил (первая строка затерлась форматированием)
Эту ошибку получаю при build'е проекта.
Делал Rebuil и Clear Cache - не помогает
А, всё, вижу в чём проблема.
Наводящий вопрос должен тебе помочь - откуда мокси, при вызове метода createMainPresenter
узнает, какой handler передать?
Тебе нужно просто изменить вот так:
@ProvidePresenter
MainPresenter createMainPresenter(DbHandler handler){
return new MainPresenter(handler);
}
Но тут у тебя есть большая проблема: презентре будет хранить ссылку на DbHandler, который видимо хранит ссылку на Activity. Поэтому лучше ходи презентером в какой-нибудь синглтон и запрашивай у него DbHandler. Так не будет утечки памяти. Или в DbHandler ты в результате берешь контекст прилжоения? (но это всё равно, потому что в таком виде не красиво).
Опечатку с dbHandler/handler я убрал. Результаты не поменялись.
P.S. по архитектуре:
Я понимаю что сейчас все выглядит не стройно и будут подводные камни.
Хочу поэтапно решать проблемы. Сначала Presenter потом di
P.P.S.
Проект: TimeStamp
Ветка: PresenterIssue
Я не праильно написал %)
Надо вот так изменить:
MainPresenter createMainPresenter(){
return new MainPresenter(handler);
}```
Т.е. метод createMainPresenter ничего не должен получать на вход
Спасибо БОЛЬШОЕ!
Не заметил этой особенности в примере в Вашей документации.