带改造的顺序请求

时间:2016-01-13 16:58:10

标签: android retrofit

我正在使用改造来连接到每个响应中包含唯一令牌的API。然后必须将此令牌包含在下一个请求中。这意味着我需要在发出下一个请求之前等待对请求的响应。

为了达到这个目的,是否有改进的内置机制?如果不是推荐的方法是什么?请注意,我正在使用异步改进方法和1.9版。拦截器用于读取令牌并自动将其添加到下一个请求,这非常有效。当2个请求非常接近时会出现问题,因此第二个请求最终使用过时令牌​​,因为第一个请求尚未返回新请求。

1 个答案:

答案 0 :(得分:0)

我建议你将RxAndroid与Retrofit结合使用(Retrofit支持RxJava)。

通过这种方式,您可以轻松地将呼叫链接起来,例如:

webservice.getToken()
    .flatMap(new Func1<Response, Observable<Response>>() {

           @Override
           public Observable<Response> call(Response getTokenResponse) {
              String token = ... // TODO extract token.
              return webservice.getDataFromWeb(token);
           }
        })

使用webservice.getToken(),您将检索令牌。此调用的响应作为参数getTokenResponse传递给flatMap-operator。在这里,您可以提取令牌,您可以使用此令牌执行第二次呼叫。

由于这是一个复杂的主题,可能需要进一步阅读,我建议以下RxAndroid链接:

https://github.com/ReactiveX/RxAndroid

https://github.com/ReactiveX/rxjava/wiki

http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/

http://joluet.github.io/blog/2014/07/07/rxjava-retrofit/