Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

255
Visualizações
Dagger2 Cannot be provided without an @Provides- or @Produces-annotated method

So i'm developing an app with mvp pattern and i'm having issues using Dagger2

I have created an interface for my presenter called HelloPresenter.

And then i created an implementation for that interface called HelloPresenterImpl

My HelloPresenter

public interface HelloPresenter {

    public void sayHello();

}

My HelloPresenterImpl

public class HelloPresenterImpl implements HelloPresenter {

    StoryView storyView;

    @Inject
    public HelloPresenterImpl(StoryView storyView) {
        this.storyView = storyView;
    }

    @Override
    public void sayHello() {
        Log.d(TAG, "hello there");
    }

}

My component

@UserScope
@Component(dependencies = NetComponent.class, modules = RetrofitModule.class)
public interface StoryComponent {
    void inject(MainActivity activity);
    void inject(HelloPresenter helloPresenter);
}

My module

@Module
public class HelloModule {

    @Provides
    public HelloPresenter providesHelloPresenter(final HelloPresenterImpl presenter){
        return presenter;
    }

}

My BaseApplication

public class BaseApplication extends Application {

    private NetComponent mNetComponent;
    private StoryComponent mStoryComponent;

    @Override
    public void onCreate() {
        super.onCreate();

        mNetComponent = DaggerNetComponent.builder()
                .appModule(new AppModule(this))
                .netModule(new NetModule())
                .build();

        mStoryComponent = DaggerStoryComponent.builder()
                .netComponent(mNetComponent)
                .retrofitModule(new RetrofitModule())
                .storyModule(new StoryModule())
                .build();

    }

    public NetComponent getNetComponent() {
        return mNetComponent;
    }

    public StoryComponent getStoryComponent() {
        return mStoryComponent;
    }

Now, when i try to inject it in my MainActivity, it throws an Error saying

Error:(18, 10) error: com.exampleapp.Hello.presenter.HelloPresenter cannot be provided without an @Provides- or @Produces-annotated method. com.exampleapp.Hello.presenter.HelloPresenter is injected at com.exampleapp.Hello.MainActivity.HelloPresenter com.exampleapp.Hello.MainActivity is injected at com.exampleapp.di.components.HelloComponent.inject(activity)

public class MainActivity extends AppCompatActivity {

    @Inject
    SharedPreferences mSharedPreferences;

    @Inject
    StoryInterface storyInterface;

    @Inject 
    HelloPresenter helloPresenter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ((BaseApplication) getApplication()).getStoryComponent().inject(this);

        helloPresenter.sayHello();  // This throws an Error

    }

Please can someone point me in the right direction? Thanks

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Without seeing the whole project, my guess is Dagger can't figure how to create HelloPresenterImpl instance because you don't provide StoryView. I think you'll need:

@Provides
public StoryView providesStoryView() {
    return new StoryView();
}
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda