使用Hilt注入改造

时间:2020-09-20 05:49:38

标签: android kotlin dagger-hilt

我是Hilt的新手,从未正确使用过匕首。我收到以下错误。

[Dagger/MissingBinding] retrofit2.Retrofit cannot be provided without an @Inject constructor or an 
@Provides-annotated method.

我已经用@provides注释了provideRetrofit方法,并将其安装在应用程序组件中。我想将其注入我的主要活动中,并在那里使用了注入注释。我尝试将其安装在活动组件中,但结果仍然相同。

这是我的改造模块。

@Module
@InstallIn(ApplicationComponent::class)
class RetrofitModule {

@Singleton
@Provides
fun provideGson(): Gson {
    return GsonBuilder().create()
}

@Singleton
@Provides
fun provideRetrofit (gson: Gson): Retrofit{
   return Retrofit.Builder().baseUrl("Base Url")
        .addConverterFactory(GsonConverterFactory.create(gson))
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create()).build()
}
}

在我的主要活动中,我已编写了该代码以进行注入。

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

@Inject lateinit var retrofit: Retrofit

2 个答案:

答案 0 :(得分:0)

我认为您的翻新返回类型错误。试试这个(对我有用):

@Singleton
@Provides
fun provideRetrofit (gson: Gson): Retrofit.Builder() {
   return Retrofit.Builder()
        .baseUrl("Base Url")
        .addConverterFactory(GsonConverterFactory.create(gson))
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
}

编辑:哦,将class RetrofitModule更改为object RetrofitModule!否则,将永远不会执行@Provides。并且请记住,您只能在onCreate()

之后使用改造

答案 1 :(得分:0)

尝试这样更改代码:

@Module
@InstallIn(ApplicationComponent::class)
Object RetrofitModule {

    @Singleton
    @Provides
    fun provideRetrofit (gson: Gson): Retrofit{
       return Retrofit.Builder().baseUrl("Base Url")
            .addConverterFactory(
                   GsonConverterFactory.create(GsonBuilder().create())
             )
            .addCallAdapterFactory(RxJava3CallAdapterFactory.create()).build()
    }
}

尝试创建对象而不是创建类。不要在单独的函数中创建Gson。我在使用moshi转换器时也遇到了此错误。