【发布时间】:2023-01-18 05:21:42
【问题描述】:
我正在尝试遵循此 Paging 3 Codelab:https://developer.android.com/codelabs/android-paging,但在最后尝试编译时出现此错误:
RepoDao.java:17: error: To use PagingSource, you must add `room-paging` artifact from Room as a dependency. androidx.room:room-paging:<version>
public abstract androidx.paging.PagingSource<java.lang.Integer, com.example.android.codelabs.paging.model.Repo> reposByName(@org.jetbrains.annotations.NotNull()
而且最终项目也有同样的错误。我看不出代码和我的有什么区别。
RepoDao
@Dao
interface RepoDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAll(repos: List<Repo>)
@Query("SELECT * FROM repos WHERE " +
"name LIKE :queryString OR description LIKE :queryString " +
"ORDER BY stars DESC, name ASC")
fun reposByName(queryString: String): PagingSource<Int, Repo>
@Query("DELETE FROM repos")
suspend fun clearRepos()
}
Github 仓库
class GithubRepository(
private val service: GithubService,
private val database: RepoDatabase
) {
fun getSearchResultStream(query: String): Flow<PagingData<Repo>> {
Log.d("GithubRepository", "New query: $query")
// appending '%' so we can allow other characters to be before and after the query string
val dbQuery = "%${query.replace(' ', '%')}%"
val pagingSourceFactory = { database.reposDao().reposByName(dbQuery) }
@OptIn(ExperimentalPagingApi::class)
return Pager(
config = PagingConfig(
pageSize = NETWORK_PAGE_SIZE,
enablePlaceholders = false
),
remoteMediator = GithubRemoteMediator(
query,
service,
database
),
pagingSourceFactory = pagingSourceFactory
).flow
}
companion object {
const val NETWORK_PAGE_SIZE = 50
}
}
构建.gradle
roomVersion = '2.5.0'
pagingVersion = '3.1.1'
implementation "androidx.room:room-runtime:$roomVersion"
implementation "androidx.room:room-ktx:$roomVersion"
implementation "androidx.paging:paging-runtime-ktx:$pagingVersion"
kapt "androidx.room:room-compiler:$roomVersion"
也没有看到任何关于它的问题。我尝试更改房间和分页的版本、重新启动、使缓存无效,我做错了什么?
【问题讨论】:
-
您是否尝试按照错误消息所说的内容添加对
room-paging工件的依赖?
标签: android android-paging google-codelab