【问题标题】:Jetpack Paging 3 inside java/kotlin modulejava/kotlin 模块中的 Jetpack Paging 3
【发布时间】:2021-02-18 14:40:38
【问题描述】:

我正在开发一个具有简洁架构原则的应用。我有一个domain 模块,它是一个Java/Kotlin 模块,它没有android 依赖项,还有一个domainImpl 模块,它是一个Android 模块,并且依赖于localremotedomain模块。这是domain 模块中的Repository 示例:

interface MovieRepository {
    fun getMovie(id: Long): Flow<Movie>
}

下面的代码是它在domainImpl模块中的实现:

class MovieRepositoryImpl(
    private val movieApi: MovieApi
) : MovieRepository {

    override fun getMovie(id: Long): Flow<Movie> = flow {
        emit(movieApi.getMovie(id))
    }

}

在这种情况下一切正常。但现在我正在尝试为我的分页添加Android Paging 3。所以我必须向MovieRepository 接口添加一个方法,例如:

fun getMovies(): Flow<PagingData<Movie>>

但在此之前,我必须将 Paging 库添加到我的 domain 模块中,但不幸的是它是一个 Android 库,我找不到它的核心依赖项。那么我能做些什么呢?因此,我是否必须将我的 domain 模块更改为 android 模块?还是有其他解决方法?

【问题讨论】:

标签: android kotlin android-jetpack clean-architecture android-paging


【解决方案1】:

Paging 的非 android 组件位于 androidx.paging:paging-common 中 - 根据定义,对演示者 API 的任何依赖项都是特定于 Android 的,因此与 RecyclerViewLazyColumn 等相关的任何代码都需要特定于 Android。

但是PagingSourcePagingDataPagerRemoteMediator 都是由paging-common 提供的,所以你对这些类的实现,包括你的转换链和Flow&lt;PagingData&gt; 的整体输出可以完全是 android-免费。

【讨论】:

  • 这个依赖对你有用吗?我试图将它添加到我的纯 Kotlin 域模块中,但我收到“无法解析依赖项”错误。我错过了什么吗?
  • 你的 gradle 文件是什么样的? AndroidX 工件托管在 Google 的 maven 服务器上:maven.google.com/web/…
  • @TomaszKopacz 请确保您必须使用 Java 版本 1.8 而不是 1.7
猜你喜欢
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2019-07-17
相关资源
最近更新 更多