package Ġha on an . tech . activity Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġha on an . tech . R Ċ import Ġha on an . tech . databinding . Activity Login Binding Ċ import Ġokhttp 3 .* Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġokhttp 3 . RequestBody . Companion . create Ċ import Ġorg . json . JSONObject ĊĊ Ċ class ĠLogin Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Login Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġget Support ActionBar ()?. hide (); ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Login Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġvar Ġusername : String ĊĠĠĠĠĠĠĠ Ġvar Ġpassword : String ĊĠĠĠĠĠĠĠ Ġvar Ġverify Code : String ĊĠĠĠĠĠĠĠ Ġ// Ġ ç¬¬ ä¸Ģæ¬¡ åħĪ è¯·æ±Ĥ éªĮè¯ģçłģ Ġfirst Status æĺ¯ true ĊĠĠĠĠĠĠĠ Ġget Verify Pic AndGet Cookie (" http :// ha on an . tech : 9 9 9 9 / captcha ", true ) ĊĊĠĠĠĠĠĠĠ Ġbinding . verify Code ImageView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// çĤ¹åĩ» éªĮè¯ģçłģ ä¹ĭåĲİ åĨį æ¬¡ è¯·æ±Ĥ èİ·åıĸ æĸ° éªĮè¯ģçłģ ĠæŃ¤ æĹ¶ cookie å·²ç»ı èİ·åıĸ äºĨ Ġæ Ĳ º å¸¦ cookie èİ·åıĸ çļĦ éªĮè¯ģçłģ Ġ åĲİåı° session ä¸į éĩįæĸ° åĪĽå»º Ġ èĢĮ æĺ¯ åĪ·æĸ° åĨħå®¹ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Verify Pic AndGet Cookie (" http :// ha on an . tech : 9 9 9 9 / captcha ", false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ çĻ»å½ķ æĮīéĴ® Ġ çĤ¹åĩ» äºĭä»¶ ĊĠĠĠĠĠĠĠ Ġbinding . login Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġbinding . username EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġbinding . password EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Code Ġ= Ġbinding . verify Code EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences (" data ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġabc : String ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabc Ġ= Ġshared Preferences . getString (" cookie "," null ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin (" http :// ha on an . tech : 9 9 9 9 / login ", abc !! , username , password , verify Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ åħį å¯Ĩ çĻ»å½ķ æµĭè¯ķ æĮīéĴ® ĊĠĠĠĠĠĠĠ Ġbinding . no Password Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences (" data ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString (" token Head "," aaaa ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString (" token Header "," my token ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString (" token "," ey J 0 e X Ai OiJ KV 1 Qi LCJ hb G ci OiJ I Uz I 1 Ni J 9 . ey J zd WI i OiJ h ZG 1 pb i IsIm Ny ZW F 0 Z WR fd G lt Z SI 6 Ik Z ya SB N YX Ig MT kg M TI 6 NT Q 6 MD gg Q 1 N UID Iw Mj Ei LCJ le HA i Oj E 2 ND c 2 NT k 2 ND h 9 . z SN De CK Lx 0 OQ h DF _ W 5 5 Z sg T 3 X SP LI oj y 3 OU _ GC 3 a 9 PQ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲ¯åĬ¨ ä¸» activity ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . action Start ( this @ Login Activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ Ġèİ·åıĸ éªĮè¯ģçłģ å¹¶ä¸Ķ æĭ¿ åĪ° cookie Ġ Ġ æ³¨æĦı è¿Ļä¸ª first Status Ġå¦Ĥæŀľ æĺ¯ é¦ĸ æ¬¡ èİ·åıĸ éªĮè¯ģçłģ Ġ Ġ éĤ£ä¹Ī ä¸º true Ġ åĲ¦åĪĻ ä¸º false Ġm ĊĠĠĠĠ Ġ* Ġ Ġ åģļ first Status ĠçļĦ ä¸»è¦ģ çĽ® çļĦæĺ¯ ä¸į è¿Ľè¡Į å¤ļ æ¬¡ è¯·æ±Ĥ Ġ è®© æľįåĬ¡åĻ¨ å¼ĢåĲ¯ å¤ª å¤ļ æĹł çĶ¨çļĦ session Ġ åĩı å°ĳ æľįåĬ¡åĻ¨ æ¶Ī èĢĹ ĊĠĠĠĠ Ġ* Ġ Ġå½ĵ ç¬¬äºĮ æ¬¡ å¸¦ çĿĢ cookie è¿Ľè¡Į è¯·æ±Ĥ çļĦæĹ¶åĢĻ Ġresponse åŃĹæ®µ ä¸Ń å°± ä¸į åĮħåĲ« Ġset - cookie Ġ åŃĹæ®µ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Verify Pic AndGet Cookie ( url : String , first Status : Boolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient () ĊĠĠĠĠĠĠĠ Ġvar Ġrequest : Request ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( first Status Ġ== Ġtrue ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠRequest . Builder (). url ( url ). get (). build () ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences (" data ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcookie Str : String ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcookie Str Ġ= Ġshared Preferences . getString (" cookie "," null ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠRequest . Builder (). add Header (" Cookie ", cookie Str !! ). url ( url ). get (). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcall : Call Ġ= Ġclient . new Call ( request !! ) ĊĠĠĠĠĠĠĠ Ġcall . enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤±è´¥ åĽŀè°ĥ åĩ½æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : Ġjava . io . IOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" abc "," è®¿éĹ® æľįåĬ¡åĻ¨ å¤±è´¥ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĪĲåĬŁ åĽŀè°ĥ åĩ½æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : Ġokhttp 3 . Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbitmap : Bitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Status Ġ== Ġtrue ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Cookie List : ĠList < String > Ġ= Ġresponse . headers . values (" Set - Cookie ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Cookie Str : String Ġ= Ġset Cookie List . get ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabc Ġ= Ġset Cookie Str . substring ( 0 , Ġset Cookie Str . indexOf ("; ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" abc ", abc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences (" data ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString (" cookie ", abc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠPicture _ bt Ġ= Ġresponse . body !!. bytes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap Factory . decode ByteArray ( Picture _ bt , Ġ 0 , ĠPicture _ bt . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä½¿çĶ¨ Bitmap Factory å·¥ åİĤ ï¼Į æĬĬ åŃĹèĬĤ æķ°ç»Ħ è½¬ åĮĸ ä¸º bitmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¿ĻéĩĮ å¿ħé¡» ä½¿çĶ¨ Ġrun On Ui Thread Ġ åĲ¦åĪĻ æĬ¥éĶĻ Ġ åĽłä¸º ä¸įèĥ½ åľ¨ åŃĲ çº¿ç¨ĭ æĽ´æĸ° ui Ġ æĪĸèĢħ ä½¿çĶ¨ handler Ġ ä½Ĩæĺ¯ æĪĳ ä¸įä¼ļ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . verify Code ImageView . setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlogin ( url : String , cookie Str : String , username : String , password : String , verify Code : String ){ ĊĠĠĠĠĠĠĠ Ġ// Ġ éĺ² æŃ¢ ç©º åŃĹç¬¦ä¸² çĻ»å½ķ ĠæıĲ ç¤º çĶ¨æĪ· è¾ĵåħ¥ å®Įæķ´ ĊĠĠĠĠĠĠĠ Ġif ( username = ="" Ġ|| Ġpassword Ġ= ="" Ġ|| Ġverify Code Ġ= =" "){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Login Activity , Ġ" è¯· å¡«åĨĻ ä¿¡æģ¯ å®Įæķ´ åĲİ éĩį è¯ķ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient (). newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġmedia Type Ġ= Ġ" application / json ". to MediaType OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġbody : ĠRequest Body Ġ= Ġcreate ( media Type , Ġ" {\ r \ n Ġ Ġ\" password \": Ġ\" ${ password }\ ",\ r \ n Ġ Ġ\" username \": Ġ\" ${ username }\ ",\ r \ n Ġ Ġ\" verification Code \": Ġ\" ${ verify Code } \"\ r \ n }") ĊĠĠĠĠĠĠĠ Ġval Ġrequest : ĠRequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. method (" POST ", Ġbody ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Cookie ", Ġcookie Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġcall : Call Ġ= Ġclient . new Call ( request ) ĊĠĠĠĠĠĠĠ Ġcall . enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤±è´¥ åĽŀè°ĥ åĩ½æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : Ġjava . io . IOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" abc "," è®¿éĹ® æľįåĬ¡åĻ¨ å¤±è´¥ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĪĲåĬŁ åĽŀè°ĥ åĩ½æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : Ġokhttp 3 . Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Str Ġ: String = Ġresponse . body ?. string () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" abc ", Ġres Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// {" response Code ": 2 0 0 ," message ":" çĻ»å½ķ æĪĲåĬŁ "," data ":{" token Head ":" aaaa "," token Header ":" my token "," token ":" æĪĳ æĺ¯ token "} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin Object : ĠJSONObject Ġ= ĠJSONObject ( res Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ è¿ĶåĽŀ åĢ¼ä¸º 2 0 0 Ġ è¯´æĺİ çĻ»å½ķ æĪĲåĬŁ äºĨ ĠéľĢè¦ģ åŃĺåĤ¨ Ġtoken ä½ľä¸º è®¿éĹ® æİ¥åı£ çļĦ åĩ Ń è¯ģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( login Object [" response Code "]. toString (). equals (" 2 0 0 ")){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Login Activity , Ġ" çĻ»å½ķ æĪĲåĬŁ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtokens : ĠJSONObject Ġ= Ġlogin Object . get (" data ") Ġas ĠJSONObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Head : String Ġ= Ġtokens . get (" token Head "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Header : String Ġ= Ġtokens . get (" token Header "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken : String Ġ= Ġtokens . get (" token Head "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences (" data ", ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString (" token Head ", token Head ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString (" token Header ", token Header ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString (" token ", token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲ¯åĬ¨ ä¸» activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . action Start ( this @ Login Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Login Activity , Ġ" çĻ»å½ķ å¤±è´¥ ï¼Į " Ġ+ Ġlogin Object [" message "]. toString (), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }