看到这个错误:
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)
如果您需要提供改进的接口(任何接口或任何第三方库类),您需要使用模块和@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" 不提交,不推送到云端仓库?