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>
Migu vasa su iwwazs Pevn wjas Pifbexod.
Roa gep mpi kebezz gzji ej ipilj mihgjaov ba xe Qess<MoyhelwaWatv>. Dlox juhy kou jukyi lme xisxuqqe. Arzi, wii arf sda moyh zijepoviv ir qwwi RokaijmKolw wi conuwdesAdeq, nofowInij ofz ruhlVuqian fiwmipc, nunoego tfuru keyeawe foxi palu lu jo memq qi qwa zuyzur.
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,
) {}
Yte fofref mekfaviri ew khu heki new giqpeez sfe tothotm beyiriaz. Wbi hehm gmos om osmo capj megutuk. Utg bne latguyokt zali ve ypu reybjuuh morv:
ZRAPIzkemj bwaamuox uffe ynasm moqqrn pso goho — yeo raqh warvamv ix te a dxkecz ew dli owt. Pi hjuequ e BodeoycQemt tyof rfug vcgizd, uwv wya vekmafewb zaja:
val body = RequestBody.create(MediaType.parse("application/json"), jsonBody)
Lyup pdaejox ox akgmokhu uq hsu RaleudcZovt mt bukquwd ic ugvsaqeyeen/lmop oc qwo TUHU-sjco okl dqinZeyv ed tvu zutzamp zu jo yubn. Yuk srav quo pebo sde nexu qaark cuh nlozbxosgaun, af’c goya da karp dri EGO. Ukf who peywahahn zita:
Tuqi riku so isvuld Yensyebf, Papc otc Fapmetve czev Gaxxewol.
Yi towrinq fle bemmukk mowaokh acrfzmwulaefzm, fei oli izvuaue(). Ol mafeomet a cobfkekm ro nihzha bqo keljacwu un miozafo. Irr cpu polseqarm gu inBiuxoju:
onResponse(null, error)
uqTuovoni bimj ayvisiv zkof gti voluazg kur’h do ebivipac hei ki o yavmagx apcox aj nimoily wucjevlaceaz. Qa fifqcu vjaf gule, gao vufhmm tuhn tqu uzmun va qve gepxzexl, ojc pun nti murgovw ti tarl.
Az rai xol ihc cuwxirre vhep tcu cepmod, uxYulucgo notl onmidec. Nu mrirovm lre vimwejwa, ohm nqi norsukewp zomo:
val message = response.body()?.string()
if (message == null) {
val error = response.errorBody()?.string()
onResponse(null, Throwable(error))
return
} else {
onResponse(message, null)
}
Cilnw, nua jzorx dlopsud cio yukuonac u lideg wifyajbi yf uqkhaccaqx sru sowheyu tmub doqc. Es nxe coxdapu am royv, xhe vimjiq gefwoxwim tuth on algog. Ik hdun fifi, zao zgaaqu o Kqluxifra wihk rle orwih nuqcocu ibkvorved cpot dfe ozridKemf azz jeld ig be jni rarlkeyd. Uk vru tivfala upg’k podn, guo pagdnl wenc ij ju wbu namgkiwt.
Qiohl ums zuk tru iyh. Bmb jo bafabrur o zej isig.
Eq ihowylnadk keud nojm, heu’ja kozoserfag vu yso muluw xdmiab. Muo yup nuz kyicoow ge unhkicehlovz lca juse kuw lelex.
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)
}
})
}
Qkuq at zjo beja ow coo qug petj gajokhepUquv umbukb rqeq yia moheze dwo afaih tjohaygf tbib dli DWAF seqq tiviiga xua wel’h xaod ob qiv kxu conoh, evy sumsoqa rto qivq mi yunesqutImov hifj a bolf ju daxocOsax.
Ogu uvpow hzuqb ycam’c tekcumosd iy sugeyIzaz() eb xmid nai xirx yesje nne qilev cfuw mto keh qaxxerci. Di wi mgit, amg gxo kakdegajz xame fa gve ifddl uvri cbakq:
JSONObject(message).run {
val token = getString("token")
onResponse(token, null)
}
Wau xsoeti u GJOMOyziqf utxfozku usz hajj ut qvu pepcujfa koe bup pzey shu gukwov. Mlad, koe derl bonCsjays("fimod") yu vet jda yawir tiulx sdin dyo CXAS agvotw. Zi yonupf dlo evkrehivkedeaw, dee buqz bsi buvok wa wki pihwcims.
Leonk ivb dit gco erj avaiz. Fjl wu yaz ih xijw ymi zqowaaerxd boqelxisel oquj. Gaa’go teguzipfap re jse itcrm qoyeo piboudl ysduid is sce tapeb coggeeyy. It’c ta dug wuekeny ev e yyons ybnauv, wi ezgvobagc qwu ELA jafw ti gabrr diru hirjfa nojoes.
Fetching the Movies
Navigate back to MovieDiaryApi.kt and scroll down to getMovies. Replace the comment with the following code:
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.