response为null时怎么进入onNext
参考:
1. 如果不需要输出response响应头
可以借助map
,在subscribe
之前把可能为null
的response映射成另外一个不空的对象。
这样的话,就不会自动走进onError
了。
例如,在presenter里面:
private void func(FuncReq funcReq) {
// ...
// ...
// ...
// ...
funcModel.responseNull(funcReq)
.map(new Func1<Response<FuncResp>, Object>() {
@Override
public Object call(Response<FuncResp> funResp) {
return funResp == null ? new NotNullObj() : funResp;
}
})
.subscribe(new Subscriber<Object>() {
@Override
public void onComplete() {
Log.d(TAG, "onComplete: ");
}
@Override
pubic void onError(Throwable throwable) {
Log.d(TAG, "onError: ");
}
@Override
public void onNext(Object notNullResponse) {
Log.d(TAG, "onNext: ");
}
});
// ...
// ...
// ...
// ...
}
2. 如果需要输出response响应头
如果需要看响应码的话,就要保留response
的数据,那么可以将Response
的类型设置成ResponseBody
。
这样返回的Response
就不会是null,而且ResponseBody
里面会保存一部分头部数据并且可以直接访问得到。
例如,在presenter里面,
private void func(FuncReq funcReq) {
// ...
// ...
// ...
funcModel.responseNull(funcReq)
.subscribe(new Subscriber<Response<ResponseBody>>() {
@Override
public void onComplete() {
Log.d(TAG, "onComplete: ");
}
@Override
pubic void onError(Throwable throwable) {
Log.d(TAG, "onError: ");
}
@Override
public void onNext(Response<ResponseBody> notNullResponse) {
Log.d(TAG, "onNext: ");
Log.d(TAG, "notNullResponse: " + notNullResponse.toString());
Log.d(TAG, "responseCode: " + String.valueOf(notNullResponse.code()));
}
});
// ...
// ...
// ...
}
3. 如果只是想模拟http请求查看报文,以及为什么会跨域
可以考虑postman
,而不是浏览器。因为浏览器会有跨域问题,但postman
没有。