[英]Inject into Activity using Hilt
如何在擴展 Activity 而不是 AppCompatActivity 的 class 中注入 retrofit 實例? 這是模塊:
@InstallIn(SingletonComponent::class)
object Module {
private const val BASE_URL = "API_URL_HERE"
@Singleton
@Provides
fun provideRetrofitApi(): Api {
return Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(Api::class.java)
}
}
這是我的主要活動:
@AndroidEntryPoint
class MainActivity : Activity() {
...
@Inject
lateinit var api: Api
...
這導致
使用@AndroidEntryPoint 注解的Activity 必須是androidx.activity.ComponentActivity 的子類。 (例如 FragmentActivity、AppCompatActivity 等) [Hilt] 處理未完成。 有關詳細信息,請參閱上面的錯誤。
我嘗試使用@ActivityScoped而不是@AndroidEntryPoint但它導致
kotlin.UninitializedPropertyAccessException:lateinit 屬性 api 尚未初始化。
您忘記使用@Module
注釋來裝飾您的模塊。
@Module
@InstallIn(SingletonComponent::class)
object Module {
private const val BASE_URL = "API_URL_HERE"
@Singleton
@Provides
fun provideRetrofitApi(): Api {
return Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(Api::class.java)
}
}
為什么不擴展 ComponentActivity? 這是 Hilt 的已知要求。
但是如果你真的不能,那么使用 @EntryPoint 注釋創建一個入口點。
https://developer.android.com/training/dependency-injection/hilt-android#not-supported
val hiltEntryPoint =
EntryPointAccessors.fromApplication(appContext, ExampleContentProviderEntryPoint::class.java)
val analyticsService = hiltEntryPoint.analyticsService()
從您的活動 onCreate 中調用它,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.