package Ġcom . am its al un ke . simple _ paging _ 3 . paging _ source Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ import Ġcom . am its al un ke . simple _ paging _ 3 . data . Character Data Ċ import Ġcom . am its al un ke . simple _ paging _ 3 . network . Ret ro Service Ċ import Ġjava . lang . Exception Ċ Ċ class ĠCharacter Paging Source ( val Ġapi Service : ĠRet ro Service ) Ġ: ĠP aging Source < Int , ĠCharacter Data >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < Int , ĠCharacter Data >): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstate . anchor Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < Int >): ĠLoad Result < Int , ĠCharacter Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Page Ġ= Ġparams . key Ġ?: ĠFIRST _ PAGE _ INDEX ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi Service . getData From API ( next Page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Page Number : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response ?. info ?. next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( response ?. info ?. next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Page Query Ġ= Ġuri . getQuery Parameter (" page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Page Number Ġ= Ġnext Page Query ?. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġresponse . results , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġnext Page Number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFIRST _ PAGE _ INDEX Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ }