package Ġcom . example . cool w he ather Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . ListView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . example . cool w he ather . db . City Ċ import Ġcom . example . cool w he ather . db . Count y Ċ import Ġcom . example . cool w he ather . db . Province Ċ import Ġcom . example . cool w he ather . util . Http Util Ċ import Ġcom . example . cool w he ather . util . Utility Ċ import Ġkotlinx . android . synt hetic . main . activity _ weather .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ choose _ area .* Ċ import Ġokhttp 3 . Call Ċ import Ġokhttp 3 . Callback Ċ import Ġokhttp 3 . Response Ċ import Ġorg . lite pal . crud . Data Support Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* Ġ@ Description : éĢīæĭ© åĮºåŁŁ Ċ Ġ* Ġ@ author : Ġha ish an Ċ Ġ* Ġ@ Date : Ġ 2 0 2 0 / 9 / 5 Ċ Ġ*/ Ċ class ĠChoose Area Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm ListView : ĠListView ĊĠĠĠ Ġprivate Ġvar Ġm Adapter : ĠArray Adapter < String >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm DataList : ĠMutable List < String >? Ġ= ĠArrayList () ĊĊĠĠĠ Ġ// çľģ åĪĹè¡¨ ĊĠĠĠ Ġprivate Ġvar Ġm Province List : ĠMutable List < Province >? Ġ= Ġnull ĊĊĠĠĠ Ġ// å¸Ĥ åĪĹè¡¨ ĊĠĠĠ Ġprivate Ġvar Ġm City List : ĠMutable List < City >? Ġ= Ġnull ĊĊĠĠĠ Ġ// åİ¿ åĪĹè¡¨ ĊĠĠĠ Ġprivate Ġvar Ġm Count y List : ĠMutable List < Count y >? Ġ= Ġnull ĊĊĠĠĠ Ġ// éĢī ä¸ŃçļĦ çľģ ä»½ ĊĠĠĠ Ġprivate Ġvar Ġm Selected Province : ĠPro vince ? Ġ= Ġnull ĊĊĠĠĠ Ġ// éĢī ä¸ŃçļĦ åŁİ å¸Ĥ ĊĠĠĠ Ġprivate Ġvar Ġm Selected City : ĠCity ? Ġ= Ġnull ĊĊĠĠĠ Ġ// å½ĵåīį éĢī ä¸ŃçļĦ çº§åĪ« ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Level : ĠInt ? Ġ= Ġ 0 ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLE VEL _ PROV IN CE Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLE VEL _ C ITY Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLE VEL _ COUN TY Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ PROV IN CE Ġ= Ġ" province " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ C ITY Ġ= Ġ" city " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ COUN TY Ġ= Ġ" county " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠWE ATHER _ ID Ġ= Ġ" weather _ id " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ choose _ area , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġm ListView Ġ= Ġview . findViewById ( R . id . lv _ list ) ĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= Ġm DataList ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ Ġit 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray Adapter ( it 1 , Ġandroid . R . layout . simple _ list _ item _ 1 , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm ListView . adapter Ġ= Ġm Adapter ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm ListView . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Current Level Ġ== ĠLE VEL _ PROV IN CE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Selected Province Ġ= Ġm Province List ?. get ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C ities () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Current Level Ġ== ĠLE VEL _ C ITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Selected City Ġ= Ġm City List ?. get ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Count ies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Current Level Ġ== ĠLE VEL _ COUN TY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweather Id Ġ= Ġm Count y List ?. get ( position )?. weather Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠMainActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( activity , ĠWeather Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( WE ATHER _ ID , Ġweather Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( activity Ġis ĠWeather Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġas ĠWeather Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer _ layout . close Draw ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe _ refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Weather ( weather Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Iv Back . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Current Level Ġ== ĠLE VEL _ COUN TY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C ities () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Current Level Ġ== ĠLE VEL _ C ITY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Pro vin ces () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġquery Pro vin ces () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŁ¥è¯¢ çľģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġquery Pro vin ces () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Tv Title . text Ġ= Ġ" ä¸ŃåĽ½ " ĊĠĠĠĠĠĠĠ Ġm Iv Back . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġm Province List Ġ= ĠData Support . findAll ( Province :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Province List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm DataList ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Province List ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm DataList ?. add ( it . province Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ListView . setSelection ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Level Ġ= ĠLE VEL _ PROV IN CE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġ" http :// gu olin . tech / api / china " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery From Server ( address , ĠTYPE _ PROV IN CE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŁ¥è¯¢ å¸Ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġquery C ities () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Tv Title . text Ġ= Ġm Selected Province ?. province Name ĊĠĠĠĠĠĠĠ Ġm Iv Back . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġm City List Ġ= ĠData Support . where (" province id Ġ= Ġ?", Ġm Selected Province ?. id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find ( City :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! m City List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm DataList ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm City List ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm DataList ?. add ( it . city Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ListView . setSelection ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Level Ġ= ĠLE VEL _ C ITY ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovince Code Ġ= Ġm Selected Province ?. province Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġ" http :// gu olin . tech / api / china /${ province Code }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery From Server ( address , ĠTYPE _ C ITY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŁ¥è¯¢ åİ¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġquery Count ies () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Tv Title . text Ġ= Ġm Selected City ?. city Name ĊĠĠĠĠĠĠĠ Ġm Iv Back . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġm Count y List Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Support . where (" city id Ġ= Ġ?", Ġm Selected City ?. id . toString ()). find ( Count y :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Count y List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm DataList ?. clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Count y List ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm DataList ?. add ( it . county Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ListView . setSelection ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Level Ġ= ĠLE VEL _ COUN TY ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovince Code Ġ= Ġm Selected Province ?. province Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Code Ġ= Ġm Selected City ?. city Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġ" http :// gu olin . tech / api / china /${ province Code }/${ city Code }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery From Server ( address , ĠTYPE _ COUN TY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä»İ æľįåĬ¡åĻ¨ èİ·åıĸ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġquery From Server ( address : ĠString , Ġtype : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Progress () ĊĠĠĠĠĠĠĠ ĠHttp Util . send Ok HttpRequest ( address , Ġobject Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Text : ĠString ? Ġ= Ġresponse . body ?. string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ PROV IN CE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠUtility . handle Province Response ( responseText ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ C ITY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠUtility . handle City Response ( responseText , Ġm Selected Province ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ COUN TY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠUtility . handle Count y Response ( responseText , Ġm Selected City ?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ PROV IN CE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Pro vin ces () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ C ITY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery C ities () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ COUN TY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Count ies () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" æķ°æį® åĬłè½½ å¤±è´¥ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Progress () Ġ{ ĊĠĠĠĠĠĠĠ Ġm ProgressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Progress () Ġ{ ĊĠĠĠĠĠĠĠ Ġm ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} Ċ }