Пустой RecyclerView с использованием библиотеки подкачки с использованием Dagger2 и Retrofit2 - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу использовать Библиотека подкачки из Android JetPack для разбивки на страницы. Я пытался по-разному, но ничего не получал пустой список (пустой RecyclerView ) ..

Я использую Dagger2 , OkHttp , Retrofit2 .Вот мой PageKeyedPhotoDataSource :

 override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Photo>) {
    networkState.postValue(NetworkState.LOADING)
    initialLoad.postValue(NetworkState.LOADING)

    // triggered by a refresh, we better execute sync
    try {
        val response = fetchPhotos(1).execute()
        if (response.isSuccessful) {
            val data = response.body()?.photos
            val items = data?.map { it } ?: emptyList()
            networkState.postValue(NetworkState.LOADED)
            initialLoad.postValue(NetworkState.LOADED)
            callback.onResult(items, null, 2)
        } else {
            initNetworkError("error code: ${response.code()}")
        }
    } catch (ioException: IOException) {
        initNetworkError(ioException.message ?: "unknown error")
    }
}

override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Photo>) {
    networkState.postValue(NetworkState.LOADING)

    fetchPhotos(params.key).enqueue(
        object : retrofit2.Callback<PhotoService.PhotoWrapper> {
            override fun onFailure(call: Call<PhotoService.PhotoWrapper>, t: Throwable) {
                networkState.postValue(NetworkState.error(t.message ?: "unknown err"))
            }

            override fun onResponse(
                call: Call<PhotoService.PhotoWrapper>,
                response: Response<PhotoService.PhotoWrapper>
            ) {
                if (response.isSuccessful) {
                    val data = response.body()?.photos
                    val items = data?.map { it } ?: emptyList()
                    callback.onResult(items, params.key + 1)
                    networkState.postValue(NetworkState.LOADED)
                } else {
                    networkState.postValue(
                        NetworkState.error("error code: ${response.code()}"))
                }
            }
        }
    )
}

PhotoDataSourceFactory:

 val sourceLiveData = MutableLiveData<PageKeyedPhotoDataSource>()

override fun create(): DataSource<Int, Photo> {
    val source = PageKeyedPhotoDataSource(dataSource = dataSource,
        query = query)
    sourceLiveData.postValue(source)
    return source
}

Вот фото-репозиторий:

fun getMovies(query: String, pageSize: Int): Listing<Photo>

ViewModel:

val movies = switchMap(repoResult) { it.pagedList }!!

А вот фрагмент:

 viewModel.movies.observe(this, Observer<PagedList<Photo>>{
        adapter.submitList(it)
    })

RemoteDataSource:

fun fetchPhotos(page: Int): Call<PhotoService.PhotoWrapper> {
   return photoService.getPhotos(page)
}

А вот мой PhotoService :

  @GET("photos")
fun getPhotos(@Query("page") page: Int = 1, @Query("per_page") per_page: Int = 15): Call<PhotoWrapper>

class PhotoWrapper(
    val photos: List<Photo>
)

Надеюсь, вы понимаете мой вопрос.Я просто хочу знать, почему RecyclerView пуст.И проблема в том, что у меня нет ошибок, и я не знаю, что мне делать.

...