package Ġcom . qf . base library . base . http Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . qf . base library . ext . toast Ċ import Ġkotlinx . coroutines .* Ċ import Ġorg . json . JSONException Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . net . Socket TimeoutException Ċ import Ġjava . net . Unknown Host Exception Ċ Ċ /** Ċ Ġ* Ġä½ľèĢħ ï¼ļ P eter Wu Ċ Ġ* Ġ æĹ¶éĹ´ ï¼ļ 2 0 2 0 / 1 2 / 6 Ċ Ġ* Ġæı ı è¿° ï¼ļ Base Repository Ċ Ġ*/ Ċ Ċ type alias ĠBlock < T > Ġ= Ġsuspend Ġ() Ġ-> ĠT Ċ type alias ĠError Ġ= Ġsuspend Ġ( e : ĠApiException ) Ġ-> ĠUnit Ċ Ċ open Ġclass ĠBase Repository ( ĊĠĠĠ Ġprivate Ġval Ġcoroutine Scope : ĠCor outine Scope , ĊĠĠĠ Ġprivate Ġval Ġerror LiveData : ĠMutable LiveData < ApiException > Ċ ) Ġ{ ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º å¹¶ æī§è¡Į åįı ç¨ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun < T > Ġlaunch ( block : ĠBlock < T >, Ġsuccess : Ġsuspend Ġ( T ) Ġ-> ĠUnit , Ġerror : ĠError ? Ġ= Ġnull ): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget ApiException ( it ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ?. invoke ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage ?. let Ġ{ Ġmsg Ġ-> Ġtoast ( msg ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror LiveData . post Value ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæī§è¡Į å¹¶ è¡Į åįı ç¨ĭ ĊĠĠĠĠ Ġ* Ġ çĶ¨äºİ åĲĮæĹ¶ åıĳ èµ· å¤ļä¸ª è¯·æ±Ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġ< T > Ġasync ( block : ĠBlock < T >): ĠDeferred < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcoroutine Scope . async Ġ{ Ġblock . invoke () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æį ķ èİ· å¼Ĥå¸¸ ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget ApiException ( e : ĠThrowable ): ĠApiException Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUnknown Host Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiException (- 1 0 0 , Ġ" ç½ĳç»ľ å¼Ĥå¸¸ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJSON Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiException (- 1 0 0 , Ġ" æķ°æį® å¼Ĥå¸¸ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSocket TimeoutException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiException (- 1 0 0 , Ġ" è¿ŀæİ¥ è¶ħæĹ¶ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnect Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiException (- 1 0 0 , Ġ" è¿ŀæİ¥ éĶĻè¯¯ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApiException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* åı¯ä»¥ æł¹æį® ä¸įåĲĮçļĦ æľįåĬ¡åĻ¨ çĬ¶æĢģ æĿ¥ åĪ¤æĸŃ ï¼Į çĶ±äºİ è¿ĻéĩĮ æľįåĬ¡åĻ¨ æ²¡æľī å®ļä¹ī éĶĻè¯¯ çłģ ï¼Į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ æīĢä»¥ å¦Ĥæŀľ çĬ¶æĢģ / éĶĻè¯¯ çłģ Ġ!= Ġ èĩªå®ļä¹ī çļĦ çĬ¶æĢģ çłģ ï¼Į éĥ½ è®¤ä¸º æĺ¯ æľįåĬ¡åĻ¨ åĩº éĶĻ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( e . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġxxx Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġxxx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiException ( e . status , Ġ" æľįåĬ¡åĻ¨ åĩº éĶĻ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġå¦Ĥæŀľ åįı ç¨ĭ è¿ĺ åľ¨ è¿Ĳè¡Į ï¼Į ä¸ª åĪ« æľº åŀĭ éĢĢåĩº å½ĵåīį çķĮéĿ¢ æĹ¶ ï¼Į viewModel ä¼ļ éĢļè¿ĩ æĬĽ åĩº Cancellation Exception ï¼Į ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ å¼º è¡Į ç»ĵæĿŁ åįı ç¨ĭ ï¼Į ä¸İ java ä¸Ń Interrupt Exception ç±»ä¼¼ ï¼Į æīĢä»¥ ä¸į å¿ħ çĲĨ ä¼ļ , åıª éľĢ å°Ĩ toast éļĲèĹı åį³åı¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠC ancellation Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiException (- 1 0 0 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiException (- 1 0 0 , Ġ" æľª çŁ¥ éĶĻè¯¯ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ