package Ġcom . example . test . api Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġcom . android . vol ley . Default Retry Policy Ċ import Ġcom . android . vol ley . Request Ċ import Ġcom . android . vol ley . Response Ċ import Ġcom . android . vol ley . toolbox . JsonObject Request Ċ import Ġcom . android . vol ley . toolbox . String Request Ċ import Ġcom . example . test . Request Singleton Ċ import Ġcom . example . test . env . Logger Ċ import Ġcom . github . kit tin un f . fuel . Fuel Ċ import Ġcom . github . kit tin un f . fuel . core . Blob Data Part Ċ import Ġcom . github . kit tin un f . fuel . core . Method Ċ import Ġcom . github . kit tin un f . fuel . core . Response Deserial izable Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . time . Instant ĊĊ Ċ data Ġclass ĠProject ( ĊĠĠĠ Ġvar Ġid : ĠString , ĊĠĠĠ Ġvar Ġname : ĠString Ċ ) ĊĊ Ċ data Ġclass ĠExample ( ĊĠĠĠ Ġval Ġid : ĠNumber Ġ= Ġ 0 , ĊĠĠĠ Ġval Ġexample Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġlo be Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġtype : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġitem : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġhash : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġis Test : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġmodified : ĠLong Ġ= Ġ 0 Ċ ) Ġ{ ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > ĠGson . fromJson ( json : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġfrom Json < T >( json , Ġobject Ġ: ĠType Token < T >() Ġ{} . type ) ĊĊĠĠĠ Ġ// Example ĠDeserial izer ĊĠĠĠ Ġclass ĠDeserial izer Ġ: ĠResponse Deserial izable < List < Example >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexample ListType Ġ= Ġobject Ġ: ĠType Token < List < Example >>() Ġ{} . type ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( content : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGson (). fromJson < List < Example >>( content , Ġexample ListType ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠLo be Api Helper Ġ{ ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER : ĠLogger Ġ= ĠLogger () ĊĊĠĠĠĠĠĠĠ Ġvar Ġurl Host Ġ= Ġ" 1 9 2 . 1 6 8 . 0 . 1 4 " ĊĠĠĠĠĠĠĠ Ġvar ĠprojectId Ġ= Ġ"" ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġget Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : Ġ( project : ĠList < Project >) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http ://${ this . url Host }: 3 8 1 0 1 / data / v 1 / project " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprojects : ĠArrayList < Project > Ġ= ĠArrayList < Project >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= ĠString Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . GET , Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < String > Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Array Ġ= ĠJSONArray ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġproject Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprojectId Ġ= Ġproject Array [ i ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . getProject Details ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprojects . add ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( projects . count () Ġ== Ġproject Array . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdone Ġ-- Ġfinal Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. invoke ( projects ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĠLOGGER . e ( error , Ġ" error Ġgetting Ġprojects ") Ġ}) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAccess Ġthe ĠRequest Queue Ġthrough Ġyour Ġsingleton Ġclass . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Singleton . getInstance ( context ). addTo Request Queue ( string Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Project Details ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : Ġ( project : ĠProject ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http ://${ this . url Host }: 3 8 1 0 1 / data / v 1 / project /${ projectId }" ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= ĠString Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . GET , Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < String > Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprojects Ġ= ĠJSONObject ( response ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= Ġprojects . getJSONObject (" meta ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġmeta . getString (" name ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject ( projectId , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. invoke ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" error Ġgetting Ġproject Ġdetails " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAccess Ġthe ĠRequest Queue Ġthrough Ġyour Ġsingleton Ġclass . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Singleton . getInstance ( context ). addTo Request Queue ( string Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġun load Projects ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http ://${ this . url Host }: 3 8 1 0 1 / graphql " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariables . put (" projectId ", ĠprojectId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" query ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mutation ĠUn load All Projects { unload All Projects }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= ĠJsonObject Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . POST , Ġurl , Ġparams , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < JSONObject > Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . LOGGER . i (" Response : Ġ% s ". format ( response . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĠLOGGER . e ( error , Ġ" error Ġun loading Ġprojects ") Ġ}) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAccess Ġthe ĠRequest Queue Ġthrough Ġyour Ġsingleton Ġclass . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Singleton . getInstance ( context ). addTo Request Queue ( string Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġshould Unload Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfun Ġload Project ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĠprojectId : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : Ġ( success : ĠBoolean ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcurl Ġ' http :// localhost : 3 8 1 0 1 / graphql ' Ġ\ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ- H Ġ" Content - Type : Ġapplication / json " Ġ\ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ- d Ġ'{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ" query ": Ġ" mutation ĠLoad Project ($ projectId : ID ! ){ load Project ( projectId :$ projectId )} ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ" variables ": Ġ{" projectId ": Ġ" 8 f 1 9 ac 0 a - fc 8 3 - 4 5 0 5 - b 5 f 9 - eaa 3 9 4 2 2 2 0 d 9 "} Ċ // ĠĠĠĠĠĠĠ Ġ}' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Unload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun load Projects ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Unload Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http ://${ this . url Host }: 3 8 1 0 1 / graphql " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariables . put (" projectId ", ĠprojectId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" query ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mutation ĠLoad Project (\ $ projectId : ID ! ){ load Project ( projectId :\ $ projectId )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . put (" variables ", Ġvariables ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= ĠJsonObject Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . POST , Ġurl , Ġparams , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < JSONObject > Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . LOGGER . i (" Response : Ġ% s ". format ( response . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġisn 't Ġreliable Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġresponse . getJSONObject (" data "). getBoolean (" load Project ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . e ( error , Ġ" error Ġloading Ġproject ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Request . set Retry Policy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Retry Policy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Retry Policy . DEFAULT _ MAX _ RE TR IES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Retry Policy . DEFAULT _ BACK OFF _ MULT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAccess Ġthe ĠRequest Queue Ġthrough Ġyour Ġsingleton Ġclass . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Singleton . getInstance ( context ). addTo Request Queue ( string Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Prediction ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http ://${ this . url Host }: 3 8 1 0 0 / predict /${ projectId }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= ĠString Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . GET , Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < String > Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . LOGGER . i (" Response : Ġ% s ". format ( response . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĠLOGGER . e ( error , Ġ" error Ġgetting Ġprediction ") Ġ}) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAccess Ġthe ĠRequest Queue Ġthrough Ġyour Ġsingleton Ġclass . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Singleton . getInstance ( context ). addTo Request Queue ( string Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġpost Prediction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase 6 4 String : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : Ġ( predicted Label : ĠString , Ġconfidence : ĠInt ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠString Ġ= Ġ" http ://${ this . url Host }: 3 8 1 0 0 / predict /${ projectId }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= Ġ@ Requires Api ( Build . VERSION _ CODES . N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠString Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . POST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < String > Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJSONObject ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġ( jsonObject [" outputs "] Ġas ĠJSONObject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpredicted Label Ġ= Ġ( output [" Prediction "] Ġas ĠJSONArray )[ 0 ]. toString () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel !!. text Ġ= Ġpredicted Label ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabels Ġ= Ġoutput . get JSONArray (" Labels ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlabels . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġlabels . get JSONArray ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item [ 0 ]. toString () Ġ== Ġpredicted Label ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem 1 Ġ= Ġitem [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfidence Ġ= Ġ(( item 1 Ġas ĠDouble ) Ġ* Ġ 1 0 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. invoke ( predicted Label , Ġconfidence ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĠLOGGER . e ( error , Ġ" error Ġgetting Ġprediction ") Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Body (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbody : ĠString Ġ= Ġ"{\" inputs \":{\" Image \":\" % s \" }} ". format ( base 6 4 String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbody . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAccess Ġthe ĠRequest Queue Ġthrough Ġyour Ġsingleton Ġclass . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Singleton . getInstance ( context ). addTo Request Queue ( string Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠĠĠĠĠ Ġfun Ġpost Example ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun In Background : Ġ( r : ĠRunnable ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase 6 4 String : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel : ĠString ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSince Ġthis Ġmight Ġstart Ġtraining , Ġlet 's Ġmark Ġshould Unload Ġto Ġimprove ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperformance Ġin Ġdemonstr ations . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġright Ġthing Ġto Ġdo Ġwould Ġto Ġtrack Ġthis Ġspecific ĠprojectId Ġand Ġun load Ġonly Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Unload Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http ://${ url Host }: 3 8 1 0 1 / data / v 1 / project /${ projectId }/ data stream " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= ĠString Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . GET , Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < String > Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata streams Ġ= ĠJSONArray ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtargets : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinputs : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdata streams . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġdata streams . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item [" classes "] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclasses Ġ= Ġitem . get JSONArray (" classes ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( classes . isNull ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs Ġ= Ġitem . getString (" lo be Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtargets Ġ= Ġitem . getString (" lo be Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpload Ġimage Ġto ĠINPUT Ġds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Body Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" {" is Test ": false , Ġ" item ":" ", Ġ" type ": Ġ" image "," example Id ":" ", Ġ" timestamp ": ${ Instant . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Epoch Milli ()}} """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Url : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http ://${ url Host }: 3 8 1 0 1 / data / v 1 / project /${ projectId }/ data stream /${ inputs }/ item " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠformData Ġ= ĠlistOf (" items []" Ġto Ġjson Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . i (" Starting Ġupload ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun In Background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF uel . upload ( item Url , ĠMethod . POST , ĠformData ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlob Data Part ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠByteArrayInputStream ( base 6 4 String ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" file ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilename Ġ= Ġ" some file . jpeg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response Object ( Example . Deserializer ()) Ġ{ Ġreq , Ġres , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . i ( res . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// result Ġis Ġof Ġtype ĠResult < Example , ĠException > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( example , Ġerr ) Ġ= Ġresult ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( err Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . e (" Error Ġuploading Ġimage : Ġ% s ", Ġerr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ response Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( label Ġ!= Ġnull Ġ&& Ġexample Ġ!= Ġnull Ġ&& Ġexample . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpload Ġlabel Ġto ĠTARGET Ġds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Body Item Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" {" is Test ": false , Ġ" item ":" $ label ", Ġ" type ": Ġ" text "," example Id ":" ${ example [ 0 ]. example Id }", Ġ" timestamp ": ${ Instant . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Epoch Milli ()}} """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Label Url : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http ://${ url Host }: 3 8 1 0 1 / data / v 1 / project /$ projectId / data stream /$ targets / item " ĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun In Background ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠF uel . upload ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Label Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethod . POST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" items []" Ġto Ġjson Body Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). response () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . i ( response . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ Ġerror Ġ-> ĠLOGGER . e ( error , Ġ" error Ġgetting Ġdata streams ") Ġ}) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAccess Ġthe ĠRequest Queue Ġthrough Ġyour Ġsingleton Ġclass . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Singleton . getInstance ( context ). addTo Request Queue ( string Request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }