Я использую Библиотека подкачки из 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 , где находится разбиение на страницы и места выборки страниц и URL-адреса API:
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)
}
Я не получаю ошибок и ничего не происходит.Мне просто нужен способ сделать это более продуктивным, и я хочу избежать создания класса источника данных для каждого URL-адреса API .
Надеюсь, вы понимаете, мне действительно нужен вашпомощь Я боролся с этой ошибкой в течение нескольких месяцев и не знаю, что мне делать.Для каких-либо лучших объяснений просто спросите.