package Ġcom . example . weather forecast mv vm . data . network Ċ Ċ import Ġcom . example . weather forecast mv vm . data . network . Connectivity Interceptor Ċ import Ġcom . example . weather forecast mv vm . data . network . response . Current Weather Response Ċ import Ġcom . example . weather forecast mv vm . data . network . response . Future Weather Response Ċ import Ġcom . jak ew h art on . ret rofit 2 . adapter . kotlin . coroutines . Coroutine Call Adapter Factory Ċ import Ġretrofit 2 . http . GET Ċ import Ġretrofit 2 . http . Query Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory ĊĊ Ċ const Ġval ĠAPI _ KEY Ġ= Ġ" e 2 9 e 3 a 1 3 3 2 bf 4 d 9 5 a 6 a 1 0 4 2 2 1 2 1 1 8 0 7 " Ċ const Ġval ĠBASE _ URL Ġ= Ġ" http :// api . weather api . com / v 1 /" ĊĊ Ċ interface ĠWeather API Service Ġ{ ĊĊĠĠĠ Ġ// ĠRequest ĠURI Ġ- Ġcurrent Ġweather ĊĠĠĠ Ġ// Ġhttp :// api . weather api . com / v 1 / current . json ? key = e 2 9 e 3 a 1 3 3 2 bf 4 d 9 5 a 6 a 1 0 4 2 2 1 2 1 1 8 0 7 & q = Cal af at & lang = en ĊĊĠĠĠ Ġ@ GET (" current . json ") ĊĠĠĠ Ġfun ĠgetCurrent Weather Async ( ĊĠĠĠĠĠĠĠ Ġ@ Query (" q ") Ġlocation : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ Query (" lang ") Ġlanguage Code : ĠString Ġ= Ġ" en " ĊĠĠĠ Ġ): ĠDeferred < Current Weather Response > ĊĊĠĠĠ Ġ// ĠRequest ĠURI Ġ- Ġfuture Ġweather ĊĠĠĠ Ġ// Ġhttp :// api . weather api . com / v 1 / forecast . json ? key = e 2 9 e 3 a 1 3 3 2 bf 4 d 9 5 a 6 a 1 0 4 2 2 1 2 1 1 8 0 7 & q = Cal af at & days = 3 & lang = en ĊĊĠĠĠ Ġ@ GET (" forecast . json ") ĊĠĠĠ Ġfun Ġget Future Weather Async ( ĊĠĠĠĠĠĠĠ Ġ@ Query (" q ") Ġlocation : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ Query (" days ") Ġdays Number : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ Query (" lang ") Ġlanguage Code : ĠString Ġ= Ġ" en " ĊĠĠĠ Ġ): ĠDeferred < Future Weather Response > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity Interceptor : ĠConnect ivity Interceptor ĊĠĠĠĠĠĠĠ Ġ): ĠWeather API Service Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Interceptor Ġ= ĠInter ceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParameter (" key ", ĠAPI _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Interceptor Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġok HttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( request Interceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( connectivity Interceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Coroutine Call Adapter Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Weather API Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }