【问题标题】:Sequential requests with retrofit带改造的顺序请求
【发布时间】:2016-01-13 16:58:10
【问题描述】:

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

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

【问题讨论】:

    标签: android retrofit


    【解决方案1】:

    我建议您将 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/

    【讨论】:

    • 问题是我正在改造(请原谅双关语)这个已经构建的非常大的应用程序,所以实现这样的范式转换将非常痛苦。这就是为什么我希望有一种简单的方法可以防止改造提出并行请求。
    猜你喜欢
    • 2016-12-14
    • 2016-02-08
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2018-09-29
    • 2019-01-03
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多