我正在使用Retrofit2和RxJava.所以我的电话看起来像
subscriptions.add(authenticateUser(mReq, refreshRequest) .observeOn(Schedulers.io()) .subscribeOn(Schedulers.io()) .subscribe(authResponseModel -> { processResponse(authResponseModel, username, encryptedPass); }, throwable -> { LOGW(TAG, throwable.getMessage()); }));
这是一个身份验证API.因此,当API调用失败时,我从服务器得到响应
{"messages":["InvalID username or password "]}
以及400 Bad Request
我按预期在throwable对象中得到400 Bad Request.但我想收到服务器抛出的消息.我无法弄清楚如何去做.
有人可以帮忙吗?
解决方法:
if(throwable instanceof httpException) { //we have a http exception (http status code is not 200-300) Converter<ResponseBody, Error> errorConverter = retrofit.responseBodyConverter(Error.class, new Annotation[0]); //maybe check if ((httpException) throwable).code() == 400 ?? Error error = errorConverter.convert(((httpException) throwable).response().errorBody());}
假设您正在使用Gson:
public class Error { public List<String> messages;}
消息的内容应该是错误消息的列表.在你的例子中
messages.get(0)将是:无效的用户名或密码
以上是内存溢出为你收集整理的android – 如何使用RxJava处理Retrofit 2中的网络错误全部内容,希望文章能够帮你解决android – 如何使用RxJava处理Retrofit 2中的网络错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)