Quiero mostrar mensajes de error que provienen de mi respuesta API, pero cada vez que se llama a la función onError() dentro de RXJava Muestra errores incorporados, como excepción de tiempo , error de red , etc. Dígame cómo puedo mostrar mensajes de respuesta Api como message.type , message.text estos son mis mensajes de error. Gracias
aquí está la respuesta de API
{ "code": 400, "status": "Bad Request", "message": { "type": "WARNING", "text": "User was not found" }, "data": { "generatedMessage": false, "code": "ERR_ASSERTION", "actual": null, "expected": true, "operator": "==" } }Aquí está la llamada API
@POST("api/auth/login") fun login(@Body loginModel: loginModel): Observable<LoginResponseModel>Aquí está el código URL base
private val CLIENT_URL = "http://rmms.dummy.org:3001" private val client = OkHttpClient.Builder().build() private val retrofit = Retrofit.Builder() .baseUrl(CLIENT_URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(client) .build() fun<T> buildService(service: Class<T>): T{ return retrofit.create(service) }Aquí está ViewModel
class LoginViewModel : ViewModel() { var disposable = CompositeDisposable() var serviceBuilder = ServiceBuilder.buildService(ApiServices::class.java) var loginResponse: MutableLiveData<LoginResponseModel> = MutableLiveData() fun refresh(requirContext: Context, email: String, password: String) { login(requirContext, email, password) } fun login(requirContext: Context, email: String, password: String) { var login = loginModel(email, password) disposable.add( serviceBuilder.login(login) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .unsubscribeOn(Schedulers.io()) .subscribeWith(object : DisposableSingleObserver<LoginResponseModel>(), io.reactivex.Observer<LoginResponseModel> { override fun onSuccess(value: LoginResponseModel?) { } override fun onError(e: Throwable?) { if (e is retrofit2.HttpException) { AlertMessageDialog.genaricAlertDialog(requirContext, "WARNING", "Invalid Credentials Provided" ) } else if (e is SocketTimeoutException) { Log.e("time exception******>", e.message.toString()) } else if (e is IOException) { Log.e("network error******>", e.message.toString()) } else { Log.e("unknown error******>", e?.message.toString()) } } override fun onNext(value: LoginResponseModel?) { value?.let { if (value.code == 200) { }else{ AlertMessageDialog.genaricAlertDialog(requirContext,"${value.message.type}","${value.message.text}") } } } override fun onComplete() { } }) ) } override fun onCleared() { super.onCleared() disposable.clear() } }