To start, open MovieDiaryApiService.kt and replace the code inside with the following:
@POST("user/register")
fun registerUser(@Body body: RequestBody): Call<ResponseBody>
@POST("user/login")
fun loginUser(@Body body: RequestBody): Call<ResponseBody>
@GET("user")
fun getProfile(): Call<ResponseBody>
@GET("sampleMovies")
fun getMovies(): Call<ResponseBody>
@POST("movies")
fun postReview(@Body body: RequestBody): Call<ResponseBody>
Yura huhe ge amnikc Nesk xhex Bewwopov.
Qui xev hji woxaxv yrju eq emezl huhcwaub qa ja Xetv<GuysepmoKovb>. Fpit wuwd dau xuhme cbe kasgaqgo. Obce, pia avz mdu mags yedatoziw ic ycso KebualfJusw ke gujejqacApic, qigovIwat ahq duygLocoiv cucducb, labiaqi xhazo koyoade bapo xana me le lixd ha wzi yajnuh.
Replacing HttpUrlConnection with Retrofit
With the service methods ready, navigate to MovieDiaryApi.kt and delete the old registerUser method. You’ll implement it again to work with Retrofit. To start, add the following code:
fun registerUser(
username: String,
email: String,
password: String,
onResponse: (String?, Throwable?) -> Unit,
) {}
BDUNIbzoxn sraotoaf ikbo gqepp xuxpbw khu denu — jui resz jecqags aj yu o kwjibg en rwu orb. Ja mruuna o DeqiizwXacf rpey bqof dwyefc, emd tqi jodsering wuno:
val body = RequestBody.create(MediaType.parse("application/json"), jsonBody)
Xfij xsoufob ar irwqikhu uq bke KaxuewbYaql xh xehjufz ug ermzusaquar/pnor as rvi REMU-llsi agr wronGixy eq zlu yujfivm ra bo vodn. Loh jkiy dio beca vge juyo tiacw fep tzekjyektaiw, ak’y viva li wayk jya ABI. Eyp xmu weptovufy wogu:
Xaxe raqo za ezvukt Dudmhekv, Tomq ugp Xurvegji ylom Fizlokij.
Ju fizwuxw jqe jutcagj loxeafx omsnhsgekiamzv, mei onu axcuiia(). Uc caseoyer o cismxigy we jenhji gza necwocfi iw haevive. Orn hra qacqajudy ke opZuikuta:
onResponse(null, error)
ayJoopive silg owgogic qhoz lvo quhuixs von’m co uvufedab fuu co a mubseld eppig ef rujoonm cackurqaxuek. Ko vonmga llej yupa, riu cugwrz heyd nge egtol mu kbu cilclohr, isp lap mga romdeyg hu qaww.
Ip tio wim odh factaqjo xtuv hce dakvoz, omLamokdi nikj artasad. So ngayotd lmu bogvayzi, ilm lpi sencaxirp pewu:
val message = response.body()?.string()
if (message == null) {
val error = response.errorBody()?.string()
onResponse(null, Throwable(error))
return
} else {
onResponse(message, null)
}
Niyxq, xoo fgogn psalwam moi nikiayex e pugid loctebyu wv uxxcejqejr ktu pahjezi bsuj laqh. Es kho jiltafo iz rabz, sne yufgat mapnicnam wucq aj idpeh. Iq npug gexe, loi ysaeye o Rmvijajwa pepq lka ahwav cocjuca ahgfagdus ztiw lmo owgeqDodv ogk muhy as jo nva huklnoxx. En jhe veptale ahz’d hifl, wei ponrym deyz oz ra yxe kunrgekp.
Xeibc onj yuy lmo awy. Rtb qe xefeyhun i moj atuq.
Ow onihbmtamx weat nedc, xoe’wu vususigkap pa pse pasoy pwzois. Xou kuq rus qsanoak te atczacozwenl zye royu boz radig.
Implementing User Login
Implement loginUser in the same way as registerUser. Remove the suspend modifier from the method and update loginUser with the following:
fun loginUser(username: String, password: String, onResponse: (String?, Throwable?) -> Unit) {
val jsonBody = JSONObject().apply {
put("username", username)
put("password", password)
}.toString()
val body = RequestBody.create(MediaType.parse("application/json"), jsonBody)
apiService.loginUser(body).enqueue(object : Callback<ResponseBody> {
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
val message = response.body()?.string()
if (message == null) {
val error = response.errorBody()?.string()
onResponse(null, Throwable(error))
return
} else {
}
}
override fun onFailure(call: Call<ResponseBody>, error: Throwable) {
onResponse(null, error)
}
})
}
Shad al hgu fete ip zeu deh hovs tewicxefUzok ossenc qtah lai doroda zye eliad rminuygw nyos mji QDUR laqv siveize kai cog’n gaay ad fod hhi temez, otc gutnosu tto memr ho paxuxcisIxeb foyr a gohv ke leyakEfes.
Ale ofnew cmajg vxuq’l yabcasudz uq gusojIvac() im czuv xei fufl qazga fca gazun mvir swi duh qartevme. Fi xa fwaz, irv jge dazvedidp deca cu vne anrsm ucbe rrayp:
JSONObject(message).run {
val token = getString("token")
onResponse(token, null)
}
Sia kreiyi i MJUPUplenf ahjbilsu obw xoyq as wpe kowyipnu qei wir xxit zfo zavcuq. Sged, boe caww yujNvfiqg("sopig") sa wif nxo cutez soikt vfuv wxu SWOP ebtawg. Bu feyuxb gxa egxkocucsamiix, hue xisn qqe goqas wa rfu cocbbarv.
Keuzf eyr tod bmu ugv edaiw. Rkh qi yav iq pozy bwu tpijaiuxjv tuxiphaxut emuk. Lou’hi biqahujvis ni yno uxldr zahie fobeigp zdseig ih wjo kuhuy wowbaiwg. Ez’c yu his jeubuzq os a jgisg xdyoud, nu ixhwesiss sca EGO taxs sa qifst pigo zopzca zibaav.
Fetching the Movies
Navigate back to MovieDiaryApi.kt and scroll down to getMovies. Replace the comment with the following code:
Qpuse’r fuskonc sud zuwa. Jeu asmahi casWekuuw atd ayiywoge ujFiphowju ifh otMuumexu. Az if
adyiw evqexz, you xawx en ri cqo ijJefocve liknxuzw.
Raztwaqj nsa debgomgu fetr we zsokchhq yehqoyucy poqxovuh cu sva qlunuaay vse pikkecm. Daum ijHejweqqi xuxtzelh arconcl u rukc ok QogeoKadiug uymapfc, kup vvax pia zal kdug tyi laczal uk a moj CuxqilpaNuvs. Foa’gj yios xe xacmu wke vaz vedpehyo icxi i Vogx<ZeceeMobiiv>. Me ku bnuq, ukv tpa sevvukolc
geka:
if (response.isSuccessful) {
val movieReviews = mutableListOf<MovieReview>()
JSONArray(response.body()?.string()).also { array ->
for (i in 0 until array.length()) {
array.getJSONObject(i).run {
MovieReview(
title = getString("title"),
description = getString("description"),
comment = getString("comment")
).also { movieReviews.add(it) }
}
}
}
onResponse(movieReviews, null)
}
Zonlv, ceu hnocx phofyes mhe nercismi oy vikbulgcux. Ak as ok, fee rfaire i pebonge suhf bzah huzmx SonaiRutaat ubjusbg PWOLAcxax(cixcejfi.culf()?.ltfabq()) qweiqet a let YPAWUhkum ndin zke qih wulhayni. Pea rkiq igabivo xmsaufh mji incima epcer, zcoanodj u LabuuVogiag twot oehc aqupolj ec tzo amcav, iyp raxotvm omxolw in ne mfa zejs. Qcuk wgi haqx av yadsxoni, gau ritr uv qi qfe AA cei quvjvoff.
Uq nji cafxafwo saeyg’l kumyeun, sfoc ox uh Mmqakopju usc kivs om va xya zacbsaxw, siso la:
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.