diff --git a/app/src/main/java/com/mindorks/example/paging3/data/APIService.kt b/app/src/main/java/com/mindorks/example/paging3/data/APIService.kt index 7fb0783..bc3a329 100644 --- a/app/src/main/java/com/mindorks/example/paging3/data/APIService.kt +++ b/app/src/main/java/com/mindorks/example/paging3/data/APIService.kt @@ -12,7 +12,7 @@ import retrofit2.http.Query interface APIService { @GET("api/users") - suspend fun getListData(@Query("page") pageNumber: Int): Response + suspend fun getListData(@Query("page") pageNumber: Int): ApiResponse companion object { diff --git a/app/src/main/java/com/mindorks/example/paging3/data/datasource/PostDataSource.kt b/app/src/main/java/com/mindorks/example/paging3/data/datasource/PostDataSource.kt index dd0dba4..ad7b9ec 100644 --- a/app/src/main/java/com/mindorks/example/paging3/data/datasource/PostDataSource.kt +++ b/app/src/main/java/com/mindorks/example/paging3/data/datasource/PostDataSource.kt @@ -3,26 +3,32 @@ package com.mindorks.example.paging3.data.datasource import androidx.paging.PagingSource import com.mindorks.example.paging3.data.APIService import com.mindorks.example.paging3.data.response.Data +import java.io.IOException class PostDataSource(private val apiService: APIService) : PagingSource() { + private val DEFAULT_PAGE_INDEX= 1 + override suspend fun load(params: LoadParams): LoadResult { - try { - val currentLoadingPageKey = params.key ?: 1 + val currentLoadingPageKey = params.key ?: DEFAULT_PAGE_INDEX + return try { val response = apiService.getListData(currentLoadingPageKey) val responseData = mutableListOf() - val data = response.body()?.myData ?: emptyList() + val data = response.myData ?: emptyList() responseData.addAll(data) - val prevKey = if (currentLoadingPageKey == 1) null else currentLoadingPageKey - 1 + val prevKey = if (currentLoadingPageKey == DEFAULT_PAGE_INDEX) null else currentLoadingPageKey - 1 + val nextKey = if(responseData.isEmpty()) null else currentLoadingPageKey + 1 return LoadResult.Page( data = responseData, prevKey = prevKey, - nextKey = currentLoadingPageKey.plus(1) + nextKey = nextKey ) } catch (e: Exception) { - return LoadResult.Error(e) + LoadResult.Error(e) + } catch (e: IOException) { + LoadResult.Error(e) } } diff --git a/app/src/main/java/com/mindorks/example/paging3/data/response/ApiResponse.kt b/app/src/main/java/com/mindorks/example/paging3/data/response/ApiResponse.kt index 365adae..c9c4c18 100644 --- a/app/src/main/java/com/mindorks/example/paging3/data/response/ApiResponse.kt +++ b/app/src/main/java/com/mindorks/example/paging3/data/response/ApiResponse.kt @@ -5,15 +5,15 @@ import com.squareup.moshi.Json data class ApiResponse( @Json(name = "ad") - val ad: Ad, + val ad: Ad?, @Json(name = "data") - val myData: List, + val myData: List?, @Json(name = "page") - val page: Int, + val page: Int?, @Json(name = "per_page") - val per_page: Int, + val per_page: Int?, @Json(name = "total") - val total: Int, + val total: Int?, @Json(name = "total_pages") - val total_pages: Int + val total_pages: Int? ) \ No newline at end of file