我正在使用 JetPack 中的分页库进行无限滚动。一切正常,但我有更多的 API地址(URL)。
我想做的是让我的片段更改 URL ,但是我不知道我应该创建什么功能来获取各个片段的每个 URL 。
我尝试了一个函数来获取每个 URL ,基于该函数,该片段是通过 SortType类
打开的要获取的功能:
private fun fetchPhotos(page : Int): Call<List<Photo>> {
if (sortType != null) {
return dataSource.fetchPhotos(sortType = sortType, page = page)
} else if (query.isNotEmpty()) {
return dataSource.fetchPhotos(page = page, query = query)
}
throw RuntimeException("Unknown state to fetch movies")
}
这里是 PhotoDataSource ,其中是分页,获取页面和 API URL:
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Photo>) {
networkState.postValue(NetworkState.LOADING)
initialLoad.postValue(NetworkState.LOADING)
fetchPhotos.getPhotos(FIRST_PAGE_NUMBER, params.requestedLoadSize).enqueue(object : Callback<List<Photo>>{
override fun onFailure(call: Call<List<Photo>>, t: Throwable) {
// keep a Completable for future retry
setRetry(Action { loadInitial(params, callback) })
val error = NetworkState.error(t.message)
// publish the error
networkState.postValue(error)
initialLoad.postValue(error) }
override fun onResponse(call: Call<List<Photo>>, response: Response<List<Photo>>) {
if (response.body() != null) {
setRetry(null)
networkState.postValue(NetworkState.LOADED)
initialLoad.postValue(NetworkState.LOADED)
callback.onResult(response.body()!!, null, FIRST_PAGE_NUMBER + INCREMENT_PAGE_VALUE)
}
}
})
}
API服务:
@GET("photos")
fun getPhotos(@Query("page") page: Int, @Query("per_page") per_page: Int): Call<List<Photo>>
@GET("photos/curated")
fun getCuratedPhotos(@Query("page") page: Int, @Query("per_page") per_page: Int): Call<List<Photo>>
@GET("/collections/featured")
fun getFeaturedCollections(@Query("page") page: Int, @Query("per_page") per_page: Int): Call<List<Photo>>
@GET("search/photos")
fun searchPhotos(@Query("page") page: Int, @Query("query") query: String): Call<List<Photo>>
SortType类:
enum class SortType(val value: Int) {
MOST_POPULAR(0),
HIGHEST_RATED(1),
UPCOMING(2)
}
我没有任何错误,也没有任何反应。我只想一种提高效率的方法,并且想避免为每个 API URL 创建一个 DataSource类。
希望您能理解,我确实需要您的帮助,我一直在为这个错误苦苦挣扎几个月,不知道该怎么办。对于任何更好的解释,只是问。