如何更改同一DataSource类中每个Fragment的API地址?

时间:2019-01-31 13:25:40

标签: android retrofit2 android-paging

我正在使用 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类

希望您能理解,我确实需要您的帮助,我一直在为这个错误苦苦挣扎几个月,不知道该怎么办。对于任何更好的解释,只是问。

0 个答案:

没有答案