package Ġtop . may bes ix . xh http . invocation Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġokhttp 3 .* Ċ import Ġtop . may bes ix . xh http . XH Http Ċ import Ġtop . may bes ix . xh http . annotation .* Ċ import Ġtop . may bes ix . xh http . callback . Observer CallBack Ċ import Ġtop . may bes ix . xh http . config . XH Http Config Ċ import Ġtop . may bes ix . xh http . exception . HttpException Ċ import Ġtop . may bes ix . xh http . util . XH Http Utils Ċ import Ġtop . may bes ix . xh http . util . XH Http Utils . log Ċ import Ġtop . may bes ix . xh http . util . XH Http Utils . log D Ċ import Ġtop . may bes ix . xh http . util . XH Http Utils . log E Ċ import Ġjava . lang . reflect . Invocation Handler Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . net . Unknown Host Exception Ċ import Ġkotlin . concurrent . thread Ċ import Ġkotlin . reflect . jvm . kotlin Function ĊĊ Ċ /** Ċ Ġ* Ġ@ author ĠMaybe Six Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 4 / 1 0 Ċ Ġ* Ġ@ desc Ġ åħ·ä½ĵ çļĦ ä»£çĲĨ å®ŀçİ° . Ċ Ġ*/ Ċ class ĠBase Invocation Handler ( config : ĠX H Http Config ?) Ġ: ĠInvocation Handler Ġ{ ĊĠĠĠ Ġval Ġhandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( proxy : ĠAny ?, Ġmethod : ĠMethod ?, Ġargs : ĠArray < out ĠAny >? ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ps : è¿ĻéĩĮ ä¸ºäºĨ æĸ¹ä¾¿ å°± çĽ´æİ¥ new ĠThread äºĨ , å¦Ĥæŀľ æĺ¯ ä½¿çĶ¨çļĦ è¯Ŀ åı¯ä»¥ä½¿çĶ¨ çº¿ç¨ĭ æ±ł æĪĸèĢħ kt åįı ç¨ĭ , æ¶Ī èĢĹ ä¼ļ ä½İ å¾Īå¤ļ , ä¸ĢèĪ¬ é¡¹çĽ® ä¸Ń æĺ¯ ä¸į åħģè®¸ çĽ´æİ¥ new ĠThread çļĦ ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( XH Http . baseUrl . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠHttp Exception (" baseUrl ä¸įèĥ½ä¸ºç©º ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! XH Http Utils . check Url ( XH Http . baseUrl )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠHttp Exception (" baseUrl ä¸į åĲĪ æ³ķ ï¼Į è¯· æ£ĢæŁ¥ ï¼ģï¼ģ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ æĸ¹æ³ķ çļĦ æ³¨è§£ , åħĪ èİ·åıĸ get æ³¨è§£ , å¦Ĥæŀľ ä¸ºç©º å°± èİ·åıĸ post æ³¨è§£ ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġps : èĩªå·± çĶ¨ çļĦæĹ¶åĢĻ åı¯ä»¥ åħĪ èİ·åıĸ å¸¸ çĶ¨çļĦ æ³¨è§£ , è¿Ļæł· å°± ä¸į çĶ¨ åĪ¤æĸŃ ä¸¤ æ¬¡ äºĨ , æ¯Ķå¦Ĥ é¡¹çĽ® éĩĮ å¤§ éĥ¨åĪĨ éĥ½æĺ¯ post è¯·æ±Ĥ , éĤ£ å°± åħĪ èİ·åıĸ POST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ?. getAnnotation ( GET :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġmethod ?. getAnnotation ( POST :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿Ļä¸ª åľ°æĸ¹ åĮº åĪĨ åĩ½æķ° ä¸ĬçļĦ æ³¨è§£ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( annotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGET Ġ-> Ġstart Get ( proxy , Ġmethod , Ġargs , Ġannotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPOST Ġ-> Ġstart Post ( proxy , Ġmethod , Ġargs , Ġannotation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" äº² , ${ method ?. name } æĸ¹æ³ķ æĺ¯ ä¸įæĺ¯ å¿ ĺ åĬł æ³¨è§£ äºĨ ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠUnit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// post è¯·æ±Ĥ ĊĠĠĠ Ġprivate Ġfun Ġstart Post ( proxy : ĠAny ?, Ġmethod : ĠMethod ?, Ġargs : ĠArray < out ĠAny > ?, Ġpost : ĠPOST ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ æİ¥åı£ åľ°åĿĢ åĴĮ callback ĊĠĠĠĠĠĠĠ Ġval Ġ( complete Url , Ġparams , Ġcallback ) Ġ= Ġhandle Url AndGet Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost . url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost . callback Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠbaseUrl Ġ= ĠX H Http . baseUrl ĊĠĠĠĠĠĠĠ Ġ// æ·»åĬł å¤ĦçĲĨ è¿ĩ çļĦ url çļĦ è·¯å¾Ħ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġget RequestBody ( post , ĠbaseUrl , Ġcomplete Url , Ġparams ) ĊĠĠĠĠĠĠĠ Ġmake A Request ( request , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// get è¯·æ±Ĥ ĊĠĠĠ Ġprivate Ġfun Ġstart Get ( proxy : ĠAny ?, Ġmethod : ĠMethod ?, Ġargs : ĠArray < out ĠAny > ?, Ġget : ĠGET ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ æİ¥åı£ åľ°åĿĢ åĴĮ callback ĊĠĠĠĠĠĠĠ Ġvar Ġ( complete Url , Ġparams , Ġcallback ) Ġ= Ġhandle Url AndGet Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget . url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget . callback Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠbaseUrl Ġ= ĠX H Http . baseUrl ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġget RequestBody ( get , ĠbaseUrl , Ġcomplete Url , Ġparams ) ĊĠĠĠĠĠĠĠ Ġmake A Request ( request , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ åıĤæķ° ï¼Į è¿ĶåĽŀ url åĴĮ callback ĊĠĠĠĠ Ġ* Ġ@ param Ġmethod ĠMethod ? ĊĠĠĠĠ Ġ* Ġ@ param Ġargs ĠArray < out ĠAny >? ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhandle Url AndGet Callback ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġcallback Name : ĠString , ĊĠĠĠĠĠĠĠ Ġmethod : ĠMethod ?, ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < out ĠAny >? ĊĠĠĠ Ġ): ĠTrip le < String , ĠMap < String , ĠString >, ĠObserver CallBack ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpath Url Ġ= Ġurl ĊĠĠĠĠĠĠĠ Ġvar Ġcallback : ĠObserver CallBack ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġobserver Name Ġ= Ġcallback Name ĊĠĠĠĠĠĠĠ Ġ// åıĤæķ° Map ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġrun Ġbreaking @{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ?. kotlin Function ?. parameters ?. forEach Indexed Ġ{ Ġindex , Ġk Parameter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Parameter . type . toString () Ġ== ĠObserver CallBack :: class . java . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Name Ġ= Ġk Parameter . name Ġ?: Ġcallback Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ breaking ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// æŃ¤ å¤Ħ çĶ¨ åıį å°Ħ éģįåİĨ åıĤæķ° ĊĠĠĠĠĠĠĠ Ġmethod ?. kotlin Function ?. parameters ?. forEach Indexed Ġ{ Ġindex , Ġk Parameter Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( k Parameter . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æİ¥åı£ æľ¬ èº« çļĦ å¯¹è±¡ , æĪĳä»¬ ä¸įéľĢè¦ģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĽŀè°ĥ å¯¹è±¡ , ps : index - 1 æĺ¯ åĽłä¸º parameters çļĦ ç¬¬ 0 ä½įç½® æĺ¯ ä»£çĲĨ ç±» å¯¹è±¡ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġargs ?. get ( index Ġ- Ġ 1 ) Ġas ? ĠObserver CallBack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»¥ä¸ĭ å¤ĦçĲĨ è¢« æ³¨è§£ æłĩ æ³¨ çļĦåıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Parameter . annotations . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Parameter . annotations . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ æĺ¯ Path åıĤæķ° ï¼Į è¯´æĺİ è¦ģ æĽ¿æį¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Str Ġ= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Str Ġ= Ġargs ?. get ( index Ġ- Ġ 1 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Url Ġ= Ġpath Url . replace (" {$ old Str }", Ġnew Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it Ġis ĠParam ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¦ģ æĬĬ å®ŀä½ĵ ç±» è½¬æį¢ æĪĲ è¯·æ±Ĥ åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Obj Ġ= Ġargs ?. get ( index Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġparam Obj ?. java Class ?. declared Fields ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»¥ä¸ĭ ä¸º å¯¹ å®ŀä½ĵ ç±»çļĦ æ³¨è§£ åģļ åĪ¤æĸŃ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields ?. forEach Ġcontinuing @{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey : ĠString Ġ= Ġfield . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħģè®¸ è®¿éĹ® ç§ģ æľī åŃĹæ®µ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E (" æ³¨è§£ isnull ? Ġ" Ġ+ Ġfield . annotations . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . annotations . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E (" æ³¨è§£ ä¸į ä¸ºç©º Ġ" Ġ+ Ġkey ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . annotations . forEach Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation Ġis ĠParam Ignore ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ continu ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotation Ġis ĠParam Rename ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . getAnnotation ( Param Rename :: class . java )?. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E (" Param Rename Ġèİ·åıĸ çļĦ key " Ġ+ Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ åŃĹæ®µ çļĦ å¯¹è±¡ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= Ġfield . get ( param Obj ) Ġ?: Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿Ļä¸ª æĺ¯ä¸Ģä¸ª æĻ®éĢļ çļĦåıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj Ġis ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( o Ġin Ġobj . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( o Ġ!= Ġnull Ġ&& Ġobj [ o ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ o . toString ()] Ġ= Ġobj [ o ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ key ] Ġ= Ġobj . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä¾Ŀ æ¬¡ å°Ĩ åıĤæķ° æ·»åĬł åĪ° url ä¸Ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ k Parameter . name . toString ()] Ġ= Ġargs ?. get ( index Ġ- Ġ 1 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTrip le ( path Url , Ġparams , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¯¹ url åģļ æľĢåĲİ çļĦ å¤ĦçĲĨ ĊĠĠĠĠ Ġ* Ġ@ param Ġcomplete Url ĠString ĊĠĠĠĠ Ġ* Ġ@ param Ġparams ĠMap < String , ĠString > ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetUrl ( ĊĠĠĠĠĠĠĠ Ġtype : ĠAnnotation , ĊĠĠĠĠĠĠĠ ĠbaseUrl : ĠString , ĊĠĠĠĠĠĠĠ Ġpath Url : ĠString , ĊĠĠĠĠĠĠĠ Ġparams : ĠMap < String , ĠString > ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcomplete Url Ġ= Ġpath Url ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠGET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĺ¯åĲ¦ è¿½åĬł äºĨ ' ?' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Add Question Mark Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æŀĦå»º åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġparams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿Ľè¡Į æĭ ¼ æİ¥ url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Add Question Mark ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Url Ġ= Ġ"$ complete Url ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Add Question Mark Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Url Ġ= Ġ"$ complete Url ${ key } =${ value }& " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ¸ħ éĻ¤ æľĢåĲİ ä¸Ģä¸ª & ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( complete Url . isNotEmpty () Ġ&& Ġcomplete Url . last () Ġ== Ġ'& ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Url Ġ= Ġcomplete Url . substring ( 0 , Ġcomplete Url . length Ġ- Ġ 1 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// æ·»åĬł å¤ĦçĲĨ è¿ĩ çļĦ url çļĦ è·¯å¾Ħ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠbaseUrl Ġ+ Ġcomplete Url ĊĠĠĠĠĠĠĠ Ġ// é»ĺè®¤ åİ» éĻ¤ ç©º æł¼ ĊĠĠĠĠĠĠĠ Ġurl . trim () ĊĠĠĠĠĠĠĠ Ġ" è¯·æ±Ĥ çļĦ åľ°åĿĢ ï¼ļ ${ url }". log () ĊĠĠĠĠĠĠĠ Ġreturn Ġurl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è¯·æ±Ĥ ä½ĵ ĊĠĠĠĠ Ġ* Ġ@ param Ġtype ĠAnnotation ĊĠĠĠĠ Ġ* Ġ@ param ĠbaseUrl ĠString ĊĠĠĠĠ Ġ* Ġ@ param Ġcomplete Url ĠString ĊĠĠĠĠ Ġ* Ġ@ param Ġparams ĠMap < String , ĠString > ĊĠĠĠĠ Ġ* Ġ@ return ĠRequest ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget RequestBody ( ĊĠĠĠĠĠĠĠ Ġtype : ĠAnnotation , ĊĠĠĠĠĠĠĠ ĠbaseUrl : ĠString , ĊĠĠĠĠĠĠĠ Ġcomplete Url : ĠString , ĊĠĠĠĠĠĠĠ Ġparams : ĠMap < String , ĠString > ĊĠĠĠ Ġ): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠgetUrl ( type , ĠbaseUrl , Ġcomplete Url , Ġparams ) ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠRequest . Builder (). url ( url ) ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠGET ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . get () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġis ĠPOST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Body Ġ= ĠForm Body . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġparams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Body . add ( k , Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æŀĦå»º è¯·æ±Ĥ ä½ĵ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . post ( form Body . build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġ// æīĵåį° çĽ¸åħ³ åıĤæķ° ĊĠĠĠĠĠĠĠ Ġlog D (" ================ ===== request çļĦåıĤæķ° ================ === =") ĊĠĠĠĠĠĠĠ Ġrequest . headers . log D () ĊĠĠĠĠĠĠĠ Ġrequest . body . log D () ĊĠĠĠĠĠĠĠ Ġrequest . method . log D () ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġåıĳ èµ· è¯·æ±Ĥ åĴĮ è¯·æ±Ĥ å¤ĦçĲĨ åĩ½æķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest ĠRequest ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback ĠObserver CallBack ? ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmake A Request ( request : ĠRequest , Ġcallback : ĠObserver CallBack ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient () ĊĠĠĠĠĠĠĠ Ġval Ġcall : ĠCall Ġ= Ġclient . new Call ( request ) ĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar ĠerrorCode Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ// url ä¸įèĥ½ æľī ä¸Ńæĸĩ ï¼Į æŃ¤ å¤Ħ åºĶè¯¥ åģļ å¤ĦçĲĨ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ================ === onStart () ================== =". log E () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. onStart () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠResponse Ġ= Ġcall . execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġresponse . body ?. string () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ================ === response ================== =". log D () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" response ï¼ļ $ response ". log D () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" data : Ġ$ data ". log D () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĹł éĶĻè¯¯ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on Handle ( data , ĠerrorCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ================ === onComplete () ================== =". log E () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }