我有一个基于不同场景返回200,202,4xx的API。当我得到202时,我应该制作相同的API,直到我得到200或4xx。我尝试使用doOnErrorNext,onError,onNext。我无法解决问题
Observable<MyPOJO> makeAPI();
Observable<MyPOJO> makeAPIImpl(){
makeAPI().doOnErrorNext(/*how to I access the error code here*/);
makeAPI().doOnNext(/*given that 202 is a success code, I expected it to come here, but it goes to Error because of JSON Mapping*/);
}
doOnErrorNext - &gt;我能够再次进行API调用,但是对于我不想要的所有错误情况都会发生这种情况
我已经检查了多个这方面的答案,但是没有人专门解决了这个组合,我无法将其他答案纳入我的用例。
答案 0 :(得分:0)
我建议您使用OkHttp并使用拦截器重试您的请求,这些内容(这是我在Kotlin的一个应用程序,但它应该给你的想法):
inner class ExpiredSessionInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val response = chain.proceed(request)
if (response.code() == 202) {
val newRequest = request.newBuilder().build()
return chain.proceed(newRequest)
} else {
return response;
}
}
}
然后
val httpClientBuilder = OkHttpClient.Builder()
httpClientBuilder.addInterceptor(ExpiredSessionInterceptor())
val retrofit: Retrofit = Retrofit.Builder()
.baseUrl(SERVER_ENDPOINT_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.client(httpClientBuilder.build())
.build()