我使用的是Retrofit和RxJava,但似乎无法做我想做的事。
这是我对我的网络服务的声明:
Observable<Response> rawRemoteDownload(@Header("Cookie") String token, @Path("programId") int programId);
我遇到的问题是webservice正在返回403和带有详细信息的json有效负载。
改造调用onError,只传递Throwable,所以我无法检查响应体。
这是我测试代码的一部分
apiManager.rawRemoteDownloadRequest("token", 1).subscribe(new Observer<Response>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
// this is called and I've lost the response!
}
@Override
public void onNext(Response response) {
}
});
解决方案:
感谢Gomino,我将其作为解决方案:
new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
if (throwable instanceof RetrofitError) {
Response response = ((RetrofitError) throwable).getResponse();
System.out.println(convertToString(response.getBody()));
}
}
其中convertToString如下所示:
private String convertToString(TypedInput body) {
byte[] bodyBytes = ((TypedByteArray) body).getBytes();
return new String(bodyBytes);
}
答案 0 :(得分:6)
检查throwable是否为RetrofitError:
@Override
public void onError(Throwable e) {
if (e instanceof RetrofitError) {
Response response = ((RetrofitError) e).getResponse();
}
}