【发布时间】:2017-01-01 20:47:53
【问题描述】:
所以当登录没有问题时,我已经收到了来自 Json 的令牌,并接收了哈希
但是当来自服务器的响应是错误时,我无法收到 Json 消息 ({message:"Error : wrong email}" 因为在 onError 中我们只得到一个 Throwable 参数而不是像 on 中的模型类
如何从服务器 onError 获取 json 消息??
final Observable<TokenResponse> observable = Service.login(userCredentials);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<TokenResponse>() {
String error="";
@Override
public void onCompleted() {
mLoginView.whenLoginSucess();
}
@Override
public void onError(Throwable e) {
if (e instanceof HttpException) {
HttpException exception = (HttpException) e;
Response response = exception.response();
Converter<ResponseBody, ErrorFromServer> converter = new GsonConverterFactory()
.responseBodyConverter(ErrorFromServer.class, Annotation[0]);
ErrorFromServer error = converter.convert(response.errorBody());
}
mLoginView.errorText(error);
e.printStackTrace();
}
@Override
public void onNext(TokenResponse tokenResponse) {
SharedPreferences.Editor editor = sharedP.edit();
editor.putString("hash", tokenResponse.getToken());
editor.commit();
//getString return key value "hash" if there is no value, returns null
hash = sharedP.getString("hash",null);
}
});
令牌响应码
public class TokenResponse {
@SerializedName("hash")
@Expose
private String token;
@SerializedName("message")
@Expose
private String message;
public String getMessage() {return message;}
public String getToken() {
return token;
}
}
【问题讨论】:
-
检查
response.body()? -
查看我的新答案
标签: android json error-handling retrofit rx-java