package Ġcom . ary a . ap ig ithub users . view model Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . ary a . ap ig ithub users . Build Config . API _ KEY Ċ import Ġcom . ary a . ap ig ithub users . model . User Items Ċ import Ġcom . loop j . android . http . Async HttpClient Ċ import Ġcom . loop j . android . http . Async HttpResponse Handler Ċ import Ġcz . mse ber a . android . http client . Header Ċ import Ġorg . json . JSONArray Ċ Ċ class ĠUser ViewModel : ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġlist User Ġ= ĠMutable LiveData < ArrayList < User Items >>() ĊĊĠĠĠ Ġfun ĠsetUser () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// api . github . com / users " ĊĠĠĠĠĠĠĠ ĠLog . d ("@ URL ", Ġurl ) ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠAsync HttpClient () ĊĠĠĠĠĠĠĠ Ġclient . add Header (" Authorization ", ĠAPI _ KEY ) ĊĠĠĠĠĠĠĠ Ġclient . add Header (" User - Agent ", Ġ" request ") ĊĠĠĠĠĠĠĠ Ġclient . get ( url , Ġobject Ġ: ĠAsync HttpResponse Handler () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders : ĠArray < Header >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Body : ĠByteArray ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Items Ġ= ĠArrayList < User Items >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠString ( response Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJSONArray ( result ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġjson Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= Ġjson Array . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Items Ġ= ĠUser Items () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Items . id Ġ= ĠjsonObject . getInt (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Items . login Ġ= ĠjsonObject . getString (" login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Items . avatar Url Ġ= ĠjsonObject . getString (" avatar _ url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . add ( user Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ("@ User ", Ġuser Items . login . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist User . post Value ( list Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Exception ", Ġe . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders : ĠArray < Header >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Body : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠThrowable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġwhen Ġ( statusCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 1 Ġ-> Ġ"$ statusCode Ġ: ĠBad ĠRequest " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 3 Ġ-> Ġ"$ statusCode Ġ: ĠFor bidden " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 4 Ġ-> Ġ"$ statusCode Ġ: ĠNot ĠFound " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"$ statusCode Ġ: Ġ${ error . message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ("@ on Failure User ", ĠerrorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser (): ĠLive Data < ArrayList < User Items >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlist User ĊĠĠĠ Ġ} Ċ }