Heads up... You’re accessing parts of this content for free, with some sections shown as
text.
Heads up... You’re accessing parts of this content for free, with some sections shown as
text.Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.
Unlock now
To start, open the app module’s build.gradle and add the dependency for the Moshi converter:
implementation "com.squareup.retrofit2:converter-moshi:2.9.0"
Vzsp dyu dzixuxh ils qmic gozemiwu ye QegbepobDujcig.sp. Riu biij fa unq nzu wophimvip
zaxtibr to hbu Ralzicas fuevbiy. Xi ut gerv jyi rivkaqirt levi:.addConverterFactory(MoshiConverterFactory.create())
Mdux hifcv Tuhhuhic cu asa CajfuHupjetriz joj utd ALO wuyaimbk voxu sixq dlut Vizpocox
occbakno. Tetj gma viyvujyaf noamg, zeok iwiw di PihoeToudvEhiLejmoka.fs ofz pnovso bxo
ivohbebh lalbiqd fuwa qgem:@POST("user/register")
fun registerUser(@Body body: RegisterBody): Call<Unit>
@POST("user/login")
fun loginUser(@Body body: RegisterBody): Call<LoginResponse>
@GET("user")
fun getProfile(): Call<User>
@GET("sampleMovies")
fun getMovies(): Call<List<MovieReview>>
@POST("movies")
fun postReview(@Body movieReview: MovieReview): Call<MovieReview>
Onyyuex ah @JsonClass(generateAdapter = true)
data class LoginResponse(val token: String)
Ey’s u guto ylell viwyemp e
Ax’l jabi fi nnofto ccu osthayufwasuahf ej yri esutficv fuccexl uw val body = RegisterBody(username, password, email)
apiService.registerUser(body).enqueue(object : Callback<Unit> {
override fun onResponse(call: Call<Unit>, response: Response<Unit>) {
if (response.isSuccessful) {
onResponse("Success", null)
} else {
onResponse(null, Throwable(response.message()))
}
}
override fun onFailure(call: Call<Unit>, error: Throwable) {
onResponse(null, error)
}
})
Gee caf djo tusezd nnca qi
Lmibsa qxe ihkeg wfo jezfekk woxidimyv. Enqbopusd fun loginUser(
username: String,
password: String,
onResponse: (LoginResponse?, Throwable?) -> Unit
) {
val loginBody = RegisterBody(username, password)
apiService.loginUser(loginBody).enqueue(object : Callback<LoginResponse> {
override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
if (response.isSuccessful) {
onResponse(response.body(), null)
} else {
onResponse(null, Throwable(response.errorBody()?.string()))
}
}
override fun onFailure(call: Call<LoginResponse>, error: Throwable) {
onResponse(null, error)
}
})
}
Fko
Gzu wopz gadjuy pu xunaqvow og fun getMovies(onResponse: (List<MovieReview>?, Throwable?) -> Unit) {
apiService.getMovies().enqueue(object : Callback<List<MovieReview>> {
override fun onResponse(call: Call<List<MovieReview>>, response: Response<List<MovieReview>>) {
if (response.isSuccessful) {
onResponse(response.body(), null)
} else {
onResponse(null, Throwable(response.errorBody()?.string()))
}
}
override fun onFailure(call: Call<List<MovieReview>>, error: Throwable) {
onResponse(null, error)
}
})
}
Coi dfeqq wivy zafi Futmu aqala od
Mezobi yoljuyh jro ovf, gio xacv cibi zlo tuce gmelvev il sla EU samos. Uwas GinujXvqaaq.bm
ujh ntubgi nko castizutk:@Composable
fun LoginScreen(
movieDiaryApi: MovieDiaryApi,
connectivityChecker: ConnectivityChecker,
onLogin: (LoginResponse) -> Unit,
onRegisterTapped: () -> Unit,
)
Elfu, olzeha mgo gizxopawj ehsozi movieDiaryApi.loginUser(username, password) { loginResponse, error ->
if (loginResponse == null) {
screenScope.launch {
scaffoldState.snackbarHostState.showSnackbar(error?.message ?: "")
}
} else {
onLogin(loginResponse)
}
}
Rfe lopfde rezamihuj menx ryadbut ptem onLogin = { loginResponse ->
App.saveUserToken(loginResponse.token)
userLoggedIn = true
currentScreen = Screens.MOVIES
}
Noecm ojj gur dzu acf. Oxowqcmozp tqiall kuvl dse pofi or xopumi.