Dagger 2 DashboardMenuContract.OnGetAllDashboardMenuListener не может быть предоставлен без аннотируемого метода @ Provides - PullRequest
0 голосов
/ 19 декабря 2018

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

Вот мои настройки кода.

DashboardMenuContract.java

public interface DashboardMenuContract {

interface View{
void getAllDashboardMenuSucces(ArrayList<DashboardmenuModel> dashboardmenuModels);
void getAllDashboardMenuFailure(String message);
}
interface Presenter{
void getDashboardMenus();
}
interface Interactor{
void getAllDashboardMenusFromApi();
}

interface OnGetAllDashboardMenuListener{
void onGetAllDashboardMenuSucces(ArrayList<DashboardmenuModel> dashboardmenuModels);
void onGetAllDashboardMenuFailure(String message);
}
}

DashboardMenuPresenter.java

 public class DashboardMenuPresenter implements DashboardMenuContract.Presenter, DashboardMenuContract.OnGetAllDashboardMenuListener {

        private DashboardMenuContract.View view;
        private DashboardMenuInteractor dashboardMenuInteractor;

        @Inject
        public DashboardMenuPresenter(DashboardMenuContract.View view,DashboardMenuInteractor dashboardMenuInteractor) {
            this.view = view;
            this.dashboardMenuInteractor = dashboardMenuInteractor;
        }
}

DashboardMenuInteractor.java

public class DashboardMenuInteractor implements DashboardMenuContract.Interactor {
    private final ArrayList<DashboardmenuModel> dashboardmenuModelList = new ArrayList<>();
    DashboardMenuContract.OnGetAllDashboardMenuListener onGetAllDashboardMenuListener;
    @Inject
    public DashboardMenuInteractor(DashboardMenuContract.OnGetAllDashboardMenuListener onGetAllDashboardMenuListener) {
        this.onGetAllDashboardMenuListener = onGetAllDashboardMenuListener;
    }
}

MainActivityMvpModule.java

@Module
public class MainActivityMvpModule {
    private  DashboardMenuContract.View mView; 

    public MainActivityMvpModule(DashboardMenuContract.View mView) {
        this.mView = mView; 
    }

    @Provides
    @ActivityScope
    public DashboardMenuContract.View providesView(){
        return mView;
    } 



    @Provides
    @ActivityScope
    DashboardMenuContract.Interactor provideInteractor(DashboardMenuContract.OnGetAllDashboardMenuListener onGetAllDashboardMenuListener){
        return new DashboardMenuInteractor(onGetAllDashboardMenuListener);
    }


    @Provides
    @ActivityScope
    DashboardMenuPresenter providePresenter(DashboardMenuContract.View mView,DashboardMenuInteractor dashboardMenuInteractor){
        return new DashboardMenuPresenter(mView,dashboardMenuInteractor);
    } 
}

Ошибка трассировки

E:\AndroidStudio\Motivation\app\src\main\java\motivation\com\motivation\component\DashboardMenuComponent.java:18: error: motivation.com.motivation.core.dashboardmanu.DashboardMenuContract.OnGetAllDashboardMenuListener cannot be provided without an @Provides-annotated method.
    void injectMainActivity(MainActivity mainActivity);
         ^
      motivation.com.motivation.core.dashboardmanu.DashboardMenuContract.OnGetAllDashboardMenuListener is injected at
          motivation.com.motivation.core.dashboardmanu.DashboardMenuInteractor.<init>(onGetAllDashboardMenuListener)
      motivation.com.motivation.core.dashboardmanu.DashboardMenuInteractor is injected at
          motivation.com.motivation.module.MainActivityMvpModule.providePresenter(…, dashboardMenuInteractor)
      motivation.com.motivation.core.dashboardmanu.DashboardMenuPresenter is injected at
          motivation.com.motivation.MainActivity.dashboardMenuPresenter
      motivation.com.motivation.MainActivity is injected at
          motivation.com.motivation.component.DashboardMenuComponent.injectMainActivity(mainActivity)

1 Ответ

0 голосов
/ 19 декабря 2018

Вы должны предоставить слушателя в вашем MainActivityMvpModule.Возможно, вам следует разыграть dashboardMenuPresenter.

@Provides
@ActivityScope
DashboardMenuContract.OnGetAllDashboardMenuListener provideListener(DashboardMenuPresenter dashboardMenuPresenter){
    return dashboardMenuPresenter;
}

РЕДАКТИРОВАТЬ Потому что с моим ответом вы получаете ошибку Found a dependency cycle, что имеет смысл.Я предлагаю удалить DashboardMenuContract.OnGetAllDashboardMenuListener onGetAllDashboardMenuListener в конструкторе DashboardMenuInteractor и предоставить ему метод установки.Я не думаю, что это лучшее решение, но оно решит проблему.Недостатком является то, что вы должны установить слушателя вручную в Presenter.

...