当前位置: 首页 > 知识库问答 >
问题:

为什么这个评论在使用匕首柄时会出现问题?

乜思淼
2023-03-14

看到这个错误:

error: [Dagger/MissingBinding] com.test.consumer.service.api.review.ReviewApi cannot be provided without an @Provides-annotated method.
  public abstract static class SingletonC implements testApplication_GeneratedInjector,
                         ^
      com.test.consumer.service.api.review.ReviewApi is injected at
          com.test.consumer.service.data.review.ReviewRepository(reviewApi)
      com.test.consumer.service.data.review.ReviewRepository is injected at
          com.test.consumer.app.user.reviews.ReviewViewModel(repository)
      com.test.consumer.app.user.reviews.ReviewViewModel is injected at
          com.test.consumer.app.user.reviews.ReviewViewModel_HiltModules.BindsModule.binds(arg0)
      @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map<java.lang.String,javax.inject.Provider<androidx.lifecycle.ViewModel>> is requested at
          dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [com.test.consumer.service.testApplication_HiltComponents.SingletonC → com.test.consumer.service.testApplication_HiltComponents.ActivityRetainedC → com.test.consumer.service.testApplication_HiltComponents.ViewModelC

]

所以,流程是这样的:

>

  • 界面ReviewApi-

    类 ReviewRepository @Inject constructor( private val reviewApi: ReviewApi )

    @HiltViewModel类 ReviewViewModel @Inject constructor(private val repository: ReviewRepository) : BaseViewModel() {

    将在Activity中实现@AndroidEntryPoint,但在此之前,只有我无法同步项目,也尝试了在Activities中添加,但仍然存在相同的问题!!

    编辑:

    添加了更多代码:

    @Provides
        @Singleton
        fun provideRetrofit(client: OkHttpClient): Retrofit =
            Retrofit.Builder().baseUrl(URLConstants.API_BASE)
                .client(client).addConverterFactory(GsonConverterFactory.create()).build()
    
        @Provides
        @Singleton
        fun provideOkHttpClient(): OkHttpClient {
            val okHttpClientBuilder = OkHttpClient.Builder()
            okHttpClientBuilder.readTimeout(100, TimeUnit.SECONDS);
            okHttpClientBuilder.connectTimeout(100, TimeUnit.SECONDS);
            okHttpClientBuilder.writeTimeout(100, TimeUnit.SECONDS);
    
            val logger =
                HttpLoggingInterceptor().apply {
                    if (BuildConfig.DEBUG) {
                        level = HttpLoggingInterceptor.Level.BODY
                    } else {
                        level = HttpLoggingInterceptor.Level.NONE
                    }
                }
    
            okHttpClientBuilder.addInterceptor(logger)
            return okHttpClientBuilder.build()
        }
    
        @Provides
        @Singleton
        fun provideReviewApi(retrofit: Retrofit): ReviewApi = retrofit.create(ReviewApi::class.java)
    
        @Provides
        @Singleton
        fun provideReviewRepository(reviewApi: ReviewApi) = ReviewRepository(reviewApi)
    
  • 共有1个答案

    夹谷苗宣
    2023-03-14

    如果您需要提供改进的接口(任何接口或任何第三方库类),您需要使用模块和@Provide注释

    @Module
    @InstallIn(SingleComponent::class)
    object AppModule{
    @Provides
    fun provideBaseUrl() = Constants.BASE_URL
    
    @Singleton
    @Provides
    fun provideOkHttpClient() = 
        OkHttpClient
            .Builder()
            .build()
    }
    
    @Singleton
    @Provides
    fun provideRetrofit(okHttpClient: OkHttpClient, BASE_URL:String): Retrofit = Retrofit.Builder()
        .addConverterFactory(GsonConverterFactory.create())
        .baseUrl(BASE_URL)
        .client(okHttpClient)
        .build()
    
    @Provides
    @Singleton
    fun provideApiService(retrofit: Retrofit) = retrofit.create(ReviewApi::class.java)  //Here you have provided the interface and can be injected in anywhere in your Module
    
     类似资料:
    • 我想做一个APK的网络应用程序,我把它包装成Cordova。我遵循了各种教程,安装了Gradle并使其工作。 当我从CMD运行时,我会得到以下错误:

    • 我使用匕首有一段时间了,现在开始迁移到剑柄,但我不明白注射activity和碎片的好处。在Dagger中,它是和类似于的东西 抱歉,如果这是个愚蠢的问题。

    • 基于本教程使用Dagger Hilt添加子组件需要 这就是如何创建子组件 我的问题是如何实现 因为它没有显示它是如何提供给UserManager类的 我正在尝试创建一个AppComponent来测试子组件如何与Dagger Hilt一起工作 并在应用中 我应该如何在中创建构建器,创建实现Provider的匿名类不正确吗?

    • 我想在RxJava中实现一个下载一些文件的处理队列。我想下载的文件数量可能高达100个左右。 一切都是在Android上使用RxJava 1.1.1开发的 我做错了什么?

    • 为什么会引发主线程上的网络异常?its在异步任务上 } 编辑: 完整代码: logcat:

    • 从云端仓库拉下来的自己的项目会在根目录下新建一个名称为 "项目名.iml" (这个文件是干嘛的) 的文件,我在文件 ".gitignore" 中设置排除文件 "项目名.iml" 后使用命令 git status 仍然显示有这个文件,我要如何设置可以忽略掉文件 "项目名.iml" 不提交,不推送到云端仓库?