大家好,请帮我调试这个dagger2问题,我是dagger2的新手,刚刚开始一个项目.

public abstract interface ApplicationComponent {
            ^
  java.util.Map<java.lang.Class<? 
  >,javax.inject.Provider<dagger.android.AndroidInjector.Factory<?>>> is injected at
      dagger.android.DispatchingAndroidInjector(injectorFactoriesWithClassKeys, �)
  dagger.android.DispatchingAndroidInjector<java.lang.Object> is injected at
      com.example.dictionary.App.dispatchingServiceInjector
  com.example.dictionary.App is injected at
      
  com.example.dictionary.di.components.ApplicationComponent.inject(com.example.dictionary.App)
  error: [Dagger/MissingBinding] 
 java.util.Map<java.lang.String,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? 
 >>> cannot be provided without an @Provides-annotated method.

我的实现是:

interface ApiService {
    companion object {
        const val BASE_URL= "https://od-api.oxforddictionaries.com/"
    }

    @GET("api/v2/entries/en-gb/")
         fun getMeaning(@Query("word") word: String): Observable<Response>
    }
}




open class RemoteDataSource @Inject constructor(private val apiService: ApiService) {
     fun getWordMeaning(word: String) = apiService.getMeaning(word)
} 



@ApplicationScope
@Component(modules = [ApplicationModule::class, NetworkModule::class])
interface ApplicationComponent {
    fun inject(app: App)
    fun inject(mainActivity: MainActivity)
}


@Module
class ApplicationModule(private val application: Application) {

      @ApplicationScope
      @Provides
      fun provideApplicationContext(): Context = application.applicationContext

      @ApplicationScope
      @Provides
      fun provideSharedPreferences(): SharedPreferences =
          PreferenceManager.getDefaultSharedPreferences(application)

      @ApplicationScope
      @Provides
      fun providerDisplayMetrics(): DisplayMetrics = application.resources.displayMetrics
}



@Module
class NetworkModule(
      private val baseUrl: String,
      private val application: Application
) {
      companion object {
      const val CACHE_SIZE = 10 * 1024 * 1024L // 10 MiB
      const val TIME_OUT = 10L // time in minutes to get the response from server
  }

  @ApplicationScope
  @Provides
  fun provideGson(): Gson = GsonBuilder().create()

  @ApplicationScope
  @Provides
  fun provideOkHttpCache() = Cache(application.cacheDir, CACHE_SIZE)

  @ApplicationScope
  @Provides
  fun provideOkHttpClient(cache: Cache): OkHttpClient = with(OkHttpClient.Builder()) {
    writeTimeout(3, TimeUnit.MINUTES)
        .connectTimeout(3, TimeUnit.MINUTES)
        .readTimeout(TIME_OUT, TimeUnit.MINUTES)
    cache(cache)
    addInterceptor(headersInterceptor())
    build()
 }

 @ApplicationScope
 @Provides
 fun provideRetrofit(gson: Gson, okHttpClient: OkHttpClient): Retrofit = Retrofit.Builder()
    .baseUrl(baseUrl)
    .client(okHttpClient)
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
    .addConverterFactory(GsonConverterFactory.create(gson))
    .build()

 @ApplicationScope
 @Provides
 fun provideApiService(retrofit: Retrofit): ApiService = 
     retrofit.create(ApiService::class.java)

 private var authRequest: String? = null

 private fun headersInterceptor() = Interceptor { chain ->
    val requestBuilder = chain.request().newBuilder()
    requestBuilder.addHeader("Accept", "application/json")
    requestBuilder.addHeader("app_id", "SOME APP ID")
    requestBuilder.addHeader("app_key", "Some API KEY")
    chain.proceed(
        requestBuilder.build()
    )
 }
 }



   class App : Application(), HasAndroidInjector {

   @Inject
   lateinit var dispatchingServiceInjector: 
   DispatchingAndroidInjector<Any>

        override fun onCreate() {
             super.onCreate()
             applicationComponent.inject(this)
    
             RxJavaPlugins.setErrorHandler {
                  it.printStackTrace()
             }
        }

        override fun androidInjector(): AndroidInjector<Any> {
               return dispatchingServiceInjector
        }

        val applicationComponent: ApplicationComponent by 
        lazy<ApplicationComponent>(mode = LazyThreadSafetyMode.NONE) {
             DaggerApplicationComponent
             .builder()
             .applicationModule(ApplicationModule(this))
             .networkModule(NetworkModule(ApiService.BASE_URL, this))
             .build()
        }
   }

我try 重新构建代码,也try 使缓存失效并重新启动以重新安装依赖项,因为dagger2要求在每次实施新的依赖项注入后重新构建项目,遵循YouTube教程,以实现这一点,但迄今为止无法检测到问题,尽管在构建崩溃中它指示提供@Providers,但在我的NetworkModule中,ApplicationModule我设置这个@Provides注释.

请帮我找出解决办法.

推荐答案

正如答案https://stackoverflow.com/a/66133688/2462531中所建议的,只需在android list 的应用程序标签下添加应用程序类.

<application ... 
 android: name = ".App" ...>
 ...

Android相关问答推荐

在画布上画直线

我遇到了一个HashMaps对象没有存储在Firebase数据库中的问题.HashMap的一个对象put方法未被存储

有没有办法知道每台安卓设备上的通知限制?

从单元测试访问RES/RAW文件

在模块中找到重复的类com.google.Firebase.auth.ktx.AuthKt||Android Studio

如何从LazyColumn中的图标异步获取可绘制的加载?

如何在C++中使用JNI_GetCreatedJavaVMs调用Java代码

Material 3的MaterialSwitch默认大小太大了?如何使它变小?

相机2问题:设置AE区域、AF区域和AWB区域.

当我想使用例如 material3 时,为什么我需要添加对 material 的依赖?底部导航?

当 EditText 用于在 android studio 中将字符串发送到 firebase 时,仅允许安全调用错误

如何删除 Jetpack Compose 中按钮的左边框?

如何在 Jetpack Compose 中创建无限pager

Android Studio:按下前缀键:切换 Logcat 格式

React Native Android 应用程序在调试模式下运行良好,但当我们发布 apk 时,它会生成旧版本的应用程序

为什么我的应用程序使用这些信息?

ImageBitmap 使用 Glide/Coil 到画布

在 jetpack compose 中使用 .shadow 和 Button 会导致问题

Android Studio,Db 连接错误:发生异常情况导致驱动程序失败.请报告此异常

如何删除 Ktor 客户端 2.0.0 的默认标头