【发布时间】:2017-03-02 11:14:41
【问题描述】:
我有 rxjava(observable) + retrofit2 一起向我的应用程序发出 http 请求。我为应用程序创建了一次 OkHttpClient 并且不想重新创建它。 我在可观察级别上实现了重试逻辑 - 一起使用过滤器,retryWhen。 我想要什么 - 如果请求从服务器端完成错误,我想重试它并发送额外的标头。 所以,我既不明白如何在 retryWhen 中修改 observable,也不明白如何从拦截器级别获取有关 observable 的知识。 关于可能的方法的任何想法和/或知识?
【问题讨论】:
-
我认为你的提议行不通。一方面,okhttpclient 和 Retrofit 实例是不可变的。这意味着一旦构建了客户端,您就无法从客户端添加和删除拦截器。您也无法更改改造实例使用的客户端。
-
你可以编写一个拦截器,在服务器出现故障的情况下,它会使用一个新的头部来执行相同的请求。这对你有用吗?
-
将请求的不同版本视为完全不同的
Observables 是否有意义?然后你可以订阅Observable.concat(simpleRequest, requestWithExtraHeader).take(1)之类的东西——如果simpleRequest未能生成项目,它只会订阅requestWithExtraHeader...类似的东西? -
您能提供示例(改造接口和可观察逻辑)吗?
标签: retrofit rx-java retrofit2