package Ġcom . iz hal . dic od ing submission 3 . followers Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . iz hal . dic od ing submission 3 . model . User Ċ import Ġcom . iz hal . dic od ing submission 3 . utils . StatusCode Ċ 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 ĠFollow ers ViewModel Ġ: ĠViewModel () Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠFollow ers ViewModel :: class . java . simple Name ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġlist Users Ġ= ĠMutable LiveData < ArrayList < User >>() ĊĊĠ Ġfun Ġset Follow ers Login ( login : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġurl Ġ= Ġ" Ġhttps :// api . github . com / users /$ login / followers " ĊĠĠĠ Ġthis . getData ( url ) ĊĠ Ġ} ĊĊĠ Ġfun Ġset Following Login ( login : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġurl Ġ= Ġ" Ġhttps :// api . github . com / users /$ login / following " ĊĠĠĠ Ġthis . getData ( url ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠgetData ( url : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġusers Ġ= ĠArrayList < User >() ĊĊĠĠĠ Ġval Ġclient Ġ= ĠAsync HttpClient () ĊĠĠĠ Ġclient . set UserAgent (" Accept : Ġapplication / vnd . github . v 3 + json ") ĊĊĠĠĠ Ġclient . get ( url , Ġobject Ġ: ĠAsync HttpResponse Handler () Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( ĊĠĠĠĠĠĠĠ ĠstatusCode : ĠInt , ĊĠĠĠĠĠĠĠ Ġheaders : ĠArray < out ĠHeader > ?, ĊĠĠĠĠĠĠĠ Ġresponse Body : ĠByteArray ? ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġresponse Body ?. let Ġ{ ĠString ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= Ġresult ?. let Ġ{ ĠJSONArray ( result ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ( json Array ?. length () Ġ?: Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Obj Ġ= Ġjson Array !!. getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusers . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg _ id Ġ= Ġjson Obj . getInt (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Ġ= Ġjson Obj . getString (" login "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Url Ġ= Ġjson Obj . getString (" avatar _ url "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġjson Obj . getString (" url "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhtml Url Ġ= Ġjson Obj . getString (" html _ url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġlist Users . post Value ( users ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠ Ġe . message ?. let Ġ{ ĠLog . d ( TAG , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( ĊĠĠĠĠĠĠĠ ĠstatusCode : ĠInt , ĊĠĠĠĠĠĠĠ Ġheaders : ĠArray < out ĠHeader > ?, ĊĠĠĠĠĠĠĠ Ġresponse Body : ĠByteArray ?, ĊĠĠĠĠĠĠĠ Ġerror : ĠThrowable ? ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= ĠStatusCode . errorMessage ( statusCode , Ġerror ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġresponse Body ?. let Ġ{ ĠString ( it ) Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Status : Ġ$ errorMessage \ n Response : Ġ$ res ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġfun Ġget Users (): ĠLive Data < ArrayList < User >> Ġ{ ĊĠĠĠ Ġreturn Ġlist Users ĊĠ Ġ} Ċ }