Boa noite Alex, primeiramente gostaria de dizer que seus cursos e didatica me ajudam muito na caminhada de desenvolvedor, li um artigo seu explicando como comunicar com o servidor utilizando kotlin e retrofit, porém não estou tendo exito em chamar o metodo on failure no login, quando o retorno do servidor e 200ok ele executa quando 401 por exemplo nada acontece, li um artigo seu sobre essa comunicação com retrofit e kotlin. seguem os codigos
LoginFragment
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
loginActivity = activity as LoginActivity
txt_forgout_my_pass.setOnClickListener {
loginActivity.openForgotPassword()
}
txt_create_account.setOnClickListener {
loginActivity.toast("Criar Conta ! ")
}
btn_login.setOnClickListener {
login()
}
}
fun login() {
val email = edt_login_email.text.toString().trim().takeUnless { it.isNullOrEmpty() }?.toString()
?: throw IllegalArgumentException("empty fields")
val password = edt_login_password.text.toString().trim().takeUnless { it.isNullOrEmpty() }?.toString()
?: throw IllegalArgumentException("empty fields")
LoginWebClient().login(email, password, object : CallbackResponse<User> {
override fun failure(throwable: Throwable) {
Log.e("OnFailure", "login nao realizado")
}
override fun success(response: User) {
Log.e("success", "Login criado com sucesso")
startActivity<MainActivity>()
}
})
}
LoginWebClient
class LoginWebClient {
fun login(email: String, password: String, callbackResponse: CallbackResponse<User> ) {
val teste : String = "teste vinicius"
Log.e("teste", teste)
val call = RetrofitInicializer().loginService().login(email, password)
call.enqueue(object : retrofit2.Callback<User> {
override fun onResponse(call: Call<User>?, response: Response<User>?) {
response?.body()?.let {
val userResponse: User = it
callbackResponse.success(userResponse)
}
}
override fun onFailure(call: Call<User>?, t: Throwable?) {
t?.message?.let {
callbackResponse.failure(t!!)
Log.e("onFailure error", t?.message)
}
}
})
}
}
RetrofiInitializer
class RetrofitInicializer() {
private var interceptor: HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
val client : OkHttpClient.Builder = OkHttpClient.Builder().addInterceptor(interceptor)
private val retrofit = Retrofit.Builder()
.baseUrl("http://dev.axreg-server.anestech.com.br/app/")
.addConverterFactory(GsonConverterFactory.create())
.client(client.build())
.build()
fun loginService() = retrofit.create(LoginService::class.java)
}
LoginService
interface LoginService {
@FormUrlEncoded
@POST("login")
fun login(@Field("email") email: String, @Field("password") password: String): Call<User>
}
Desde já se puder me ajudar agradeço.