package Ġcn . x iz hip ian . ret rofit demo 3 Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ import Ġretrofit 2 . http . GET Ċ Ċ // Ġ æŃ¥éª¤ 1 : æĸ°å»º æķ°æį® æ¨¡åŀĭ ç±» Ċ data Ġclass ĠPost ( val ĠuserId : Int , Ġval Ġid : Int , Ġval Ġtitle : String , Ġval Ġbody : String ) Ċ Ċ // Ġ æŃ¥éª¤ 2 : æĸ°å»º Api æİ¥åı£ , Ġæ·»åĬł çĽ¸åħ³ æĸ¹æ³ķ Ċ interface ĠApi Ġ{ ĊĠĠĠ Ġ@ GET (" posts ") ĊĠĠĠ Ġfun Ġget Posts (): ĠCall < List < Post >> ĊĊĠĠĠ Ġ@ GET (" posts ") ĊĠĠĠ Ġsuspend Ġfun Ġsuspend Get Posts (): ĠList < Post > Ċ } Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ// Ġ æŃ¥éª¤ 3 : Ġ æĸ°å»º æľįåĬ¡ ĊĠĠĠ Ġprivate Ġval Ġapi Service Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl (" https :// json placeholder . typ icode . com /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Api :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æŃ¥éª¤ 4 : ä½¿çĶ¨ ĊĠĠĠĠĠĠĠ Ġ// Ġ æĸ¹å¼ı ä¸Ģ ï¼ļ ä¼ł ç»Ł çļĦ Callback æĸ¹å¼ı Ċ // ĠĠĠĠĠĠĠ Ġapi Service . get Posts (). enqueue ( object Ġ: ĠCallback < List < Post >> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < List < Post >>, Ġt : ĠThrowable ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" xxx ", Ġ"$ t ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < List < Post >>, Ġresponse : ĠResponse < List < Post >>) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposts Ġ= Ġresponse . body () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( posts Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( post Ġin Ġposts ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" xxx ", Ġpost . toString ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠ Ġ// Ġ æĸ¹å¼ı 2 ï¼ļ Call < XX > Ġ+ ĠCor outine Ċ // ĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi Service . get Posts (). await Response () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposts Ġ= Ġresponse . body () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( posts Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( post Ġin Ġposts ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" xxx ", Ġpost . toString ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ æĸ¹å¼ı 3 ï¼ļ suspend Ġ+ ĠCor outine Ċ // ĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposts Ġ= Ġapi Service . suspend Get Posts () Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( post Ġin Ġposts ) Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" xxx ", Ġpost . toString ()) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposts Ġ= Ġapi Service . suspend Get Posts () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġposts . join ToString ("\ n ") Ġ{ Ġit . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" xxx ", Ġ"${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }