Как изменить адрес API для каждого фрагмента из того же класса DataSource? - PullRequest
0 голосов
/ 31 января 2019

Я использую Библиотека подкачки из 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 .

Надеюсь, вы понимаете, мне действительно нужен вашпомощь Я боролся с этой ошибкой в ​​течение нескольких месяцев и не знаю, что мне делать.Для каких-либо лучших объяснений просто спросите.

...