DaggerHilt 多模块化项目无法访问类问题

发布于 2025-01-17 15:46:34 字数 2397 浏览 2 评论 0原文

我已经在Android中创建了一个具有匕首实现的多模块化项目。我的数据模块的子模块结构如下。 每当我尝试访问newsapiinterface的方法时

无法访问类'retrofit2.Response'。检查您的模块类Path 对于缺失或冲突的依赖项

模块:

 数据(模块)
   存储库(实现模块)
   网络(API服务模块)
   缓存(数据库模块)
 

存储库模块 - > datasource

class NewsDetailsImpl @Inject constructor(
        val db: NewsDatabase,
        val service: NewsApiInterface
    ) : NewsDetailsRepository {
    override suspend fun fetchNewsDetail(): Flow<News>  = flow{

    }

    override suspend fun fetchNewsList(
        query: String,
        limitStart: String,
        limitEnd: String
    ): Flow<List<News>>  = flow {


    }

    fun testRepo(query: String){
        val news = service.getNews(query)
    }
}

存储库模块 - &gt; di

@Module
@InstallIn(SingletonComponent::class)
class RepositoryModule {
    @Singleton
    @Provides
    fun provideNewsRepository( db: NewsDatabase,
                               service: NewsApiInterface
    ): NewsDetailsRepository {
        return NewsDetailsImpl(db,service)
    }
}

数据模块 - &gt;网络模块 - &GT; di

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
    @Provides
    @Singleton
    fun providesNewsService() : NewsApiInterface {
        val retrofit = Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .client(
                OkHttpClient.Builder()
                    .addInterceptor { chain ->
                        val url = chain
                            .request()
                            .url
                            .newBuilder()
                            .addQueryParameter("apiKey", NetworkConstants.API_KEY)
                            .build()
                        chain.proceed(chain.request().newBuilder().url(url).build())
                    }
                    .build()
            )
            .baseUrl(BASE_URL)
            .build()
        return retrofit.create(NewsApiInterface::class.java)
    }

}

数据模块 - &gt;网络模块

interface NewsApiInterface {
    @GET("everything")
    public fun getNews(@Query("q") query: String): Response<NewsDto>
}

I have created a Multi-Modular project in android with dagger implementation. my sub module structure for data module is below.
When ever I try to access method of my NewsApiInterface from NewsDetailsImpl inside testRepo() method and on compile time I get the error

Cannot access class 'retrofit2.Response'. Check your module classpath
for missing or conflicting dependencies

Module:

 data (Module)
   repository (Implementation Module)
   network(API Service Module)
   cache (Database Module)

repository Module -> datasource

class NewsDetailsImpl @Inject constructor(
        val db: NewsDatabase,
        val service: NewsApiInterface
    ) : NewsDetailsRepository {
    override suspend fun fetchNewsDetail(): Flow<News>  = flow{

    }

    override suspend fun fetchNewsList(
        query: String,
        limitStart: String,
        limitEnd: String
    ): Flow<List<News>>  = flow {


    }

    fun testRepo(query: String){
        val news = service.getNews(query)
    }
}

repository module -> di

@Module
@InstallIn(SingletonComponent::class)
class RepositoryModule {
    @Singleton
    @Provides
    fun provideNewsRepository( db: NewsDatabase,
                               service: NewsApiInterface
    ): NewsDetailsRepository {
        return NewsDetailsImpl(db,service)
    }
}

data module -> network module -> di

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
    @Provides
    @Singleton
    fun providesNewsService() : NewsApiInterface {
        val retrofit = Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())
            .client(
                OkHttpClient.Builder()
                    .addInterceptor { chain ->
                        val url = chain
                            .request()
                            .url
                            .newBuilder()
                            .addQueryParameter("apiKey", NetworkConstants.API_KEY)
                            .build()
                        chain.proceed(chain.request().newBuilder().url(url).build())
                    }
                    .build()
            )
            .baseUrl(BASE_URL)
            .build()
        return retrofit.create(NewsApiInterface::class.java)
    }

}

data module -> network module

interface NewsApiInterface {
    @GET("everything")
    public fun getNews(@Query("q") query: String): Response<NewsDto>
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文