I want to show errors messages that come from my API response but every time onError() function is called inside RXJava It shows built-in Errors something Like time exception, network error, etc. please tell me how can I Show Api Response messages Like message.type , message.text these are my error messages. thanks
here is Api Response
{
"code": 400,
"status": "Bad Request",
"message": {
"type": "WARNING",
"text": "User was not found"
},
"data": {
"generatedMessage": false,
"code": "ERR_ASSERTION",
"actual": null,
"expected": true,
"operator": "=="
}
}
Here is api call
@POST("api/auth/login")
fun login(@Body loginModel: loginModel): Observable<LoginResponseModel>
Here is Base URl Code
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)
}
Here is 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()
}
}