Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error when injecting Job Provider Map #1

Closed
JairAviles opened this issue Jan 20, 2018 · 4 comments
Closed

Error when injecting Job Provider Map #1

JairAviles opened this issue Jan 20, 2018 · 4 comments
Labels
help wanted Extra attention is needed

Comments

@JairAviles
Copy link
Owner

So, I did change the dependency Map into App Job Creator. It is now as:

@Singleton
class AppJobCreator
    @Inject constructor(): JobCreator {

    @Inject
    lateinit var jobs: Map<String, Provider<Job>>

    override fun create(tag: String): Job? {
        val jobProvider = jobs[tag]
        return jobProvider?.get()
    }

}

After cleaning an building again, it now shows the following on building exception regarding Dagger2 dependency injection. What could you suggest? Sorry but I am quite new also with Dagger2. That being said I think I'm getting confused.

Error:(9, 2) error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.String,? 
extends javax.inject.Provider<com.evernote.android.job.Job>> cannot be provided without an 
@Provides-annotated method.
public abstract interface AppComponent {
                ^
      java.util.Map<java.lang.String,? extends 
javax.inject.Provider<com.evernote.android.job.Job>> is injected at
          mx.jairaviles.androidevernotejobexample.core.job.AppJobCreator.jobs
      mx.jairaviles.androidevernotejobexample.core.job.AppJobCreator is injected at
          mx.jairaviles.androidevernotejobexample.di.module.JobsModule.provideJobManager(…, 
appJobCreator)
      com.evernote.android.job.JobManager is injected at
          mx.jairaviles.androidevernotejobexample.main.MainPresenter.<init>(…, mJobManager)
      mx.jairaviles.androidevernotejobexample.main.MainPresenter is injected at
          mx.jairaviles.androidevernotejobexample.main.MainActivity.presenter
      mx.jairaviles.androidevernotejobexample.main.MainActivity is injected at
          dagger.android.AndroidInjector.inject(arg0)
@JairAviles JairAviles added the help wanted Extra attention is needed label Jan 20, 2018
@adavis
Copy link

adavis commented Jan 20, 2018

Try this:

class AppJobCreator @Inject constructor(
        private val jobs: @JvmSuppressWildcards Map<String, Provider<Job>>
)  : JobCreator {

    override fun create(tag: String): Job? = jobs[tag]?.get()

}

@JairAviles
Copy link
Owner Author

@adavis Wow it works now. Thank you for all your support!

@anacoimbrag
Copy link

Hi! This solution from @adavis is not working for me, having the same error

Error:(9, 2) error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.String,? 
extends javax.inject.Provider<com.evernote.android.job.Job>> cannot be provided without an 
@Provides-annotated method.
public abstract interface AppComponent {
                ^
      java.util.Map<java.lang.String,? extends 
javax.inject.Provider<com.evernote.android.job.Job>> is injected at
          mx.jairaviles.androidevernotejobexample.core.job.AppJobCreator.jobs
      mx.jairaviles.androidevernotejobexample.core.job.AppJobCreator is injected at
          mx.jairaviles.androidevernotejobexample.di.module.JobsModule.provideJobManager(…, 
appJobCreator)
      com.evernote.android.job.JobManager is injected at
          mx.jairaviles.androidevernotejobexample.main.MainPresenter.<init>(…, mJobManager)
      mx.jairaviles.androidevernotejobexample.main.MainPresenter is injected at
          mx.jairaviles.androidevernotejobexample.main.MainActivity.presenter
      mx.jairaviles.androidevernotejobexample.main.MainActivity is injected at
          dagger.android.AndroidInjector.inject(arg0)

@JairAviles
Copy link
Owner Author

@anacoimbrag try to clean your project and build it again before running. Take into account that Dagger2 creates the graph dependencies on compile time so that that kind of error is common when running before making build to the project.

Anyway, if you need more information, here you can read a good StackOverflow thread.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

3 participants