note_31:response为null时怎么进入onNext

24 篇文章 0 订阅

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没有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值