Как работать с опцией подкачки службы API в составлении Android Jetpack?

У меня есть приложение для фильмов с архитектурой MVVM, API имеет опцию пейджинга, и при вызове мне нужно передать номер страницы в API. как мне реализовать пейджинг в моем приложении? Я должен отметить, что API предоставляет хорошие данные о номерах страниц и текущей странице.

класс данных:

data class Metadata(
val current_page: String,
val page_count: Int,
val per_page: Int,
val total_count: Int
)

мой класс модели представления:

class MovieViewModel : ViewModel() {

var movieListResponse: List<Data> by mutableStateOf(listOf())
var detailsResponse: Details by mutableStateOf(Details())
private var error: String by mutableStateOf("")
var id : Int by mutableIntStateOf(0)

fun getMovieList() {
    viewModelScope.launch {
        try {
            val api = RetrofitInstance.api.getMovies()
            movieListResponse = api.body()!!.data
        } catch (e: Exception) {
            error = e.message.toString()
        }

    }
}
fun getDetailsById() {
    viewModelScope.launch {
        try {
            val api = RetrofitInstance.api.getDetails(id = id)
            detailsResponse = api.body()!!
        } catch (e: Exception) {
            error = e.message.toString()
        }
      }
   }
}
  

API-интерфейс:

interface ApiInterface {

@GET("movies?page=22")
suspend fun getMovies(

): Response<MoviesList>

@GET("movies/{movie_id} ")
suspend fun getDetails(
    @Path("movie_id") id: Int
): Response<Details>
}

Состав пользовательского интерфейса:

   fun HomeScreenUi(moviesList: List<Data>, navController: NavHostController) {

LazyVerticalGrid(
            columns = GridCells.Fixed(2),
            Modifier
                .padding(paddingValues)
                .fillMaxSize()
                .background(Color.Transparent),
            content = {
                items(moviesList.size) {
                    HomeScreenUi(
                        itemIndex = it,
                        movies = moviesList,
                        navController = navController
                    )
                }
            }
        )
    }
0
0
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

в вашем интерфейсе API вы можете иметь что-то вроде

 @GET("movies")
suspend fun getMovies(@Query("page") pageNum:Number): Response<MoviesList>

где вы передаете pageNum как нужную страницу, сохраняя состояние,

val api = RetrofitInstance.api.getMovies(pageNum = YOUR_PAGE_NUM)

Вы можете сохранить его в состоянии модели просмотра или извлечь из последнего ответа данных о фильме, поскольку вы упомянули, что он также содержит номер последней страницы.

Дайте мне знать, если у вас есть какие-либо сомнения

Ответ принят как подходящий
  • Если вы ищете простой и простой подход к реализуя нумерацию страниц, не полагаясь на библиотеку Paging 3, вы может найти полезную информацию в этом репозитории:

ComposePagingYT

  • Альтернативно, если вы предпочитаете использовать Paging 3, вы можете захотеть Рассмотрите возможность проверки:

ComposePaging3Caching

  • Эти репозитории предлагают решения, которые могут соответствовать вашим потребности в нумерации страниц.

Другие вопросы по теме