View: private fun attemptLoginRequest(email: String, password: String) { if(validateEmail(email, emailInputLayout) && validatePassword(password)) { loginViewModel.loginUser(email, password) } evaluateStatusCode(AppPreferences.getStatusCode()) -> this line of code gets executed right after the abowe one without waiting for a result and thus sending zero to this method instead of a real status code (200 or 401) } View Model: fun loginUser(email: String, password: String) { launch { UserRepository.loginRequest(email, password) } } Repository: suspend fun loginRequest(email: String, password: String) { val dataResponse = Api.client.login( UserLoginRequest( email = email, password = password ) ).await() if(dataResponse.isSuccessful) { AppPreferences.putStatusCode(dataResponse.body()?.code ?: 800) AppPreferences.putAccessToken(dataResponse.body()?.responseData?.tokens?.accessToken ?: "", setAccessTokenExpireDate()) AppPreferences.putRefreshToken(dataResponse.body()?.responseData?.tokens?.refreshToken ?: "", setRefreshTokenExpireDate()) } }