【问题标题】:Retrofit: How to wait until request call completes before executing next line of code?改造:如何等到请求调用完成后再执行下一行代码?
【发布时间】:2020-03-17 10:09:56
【问题描述】:

我有 2 种 REST 请求方法; getA()getB()。两者都是使用call.enqueue() 的异步调用。

在获得来自 getA() 的结果之前,我无法致电 getB()。 在onCreateView() 中,我会连续调用getA()getB()。但是,getB() 会失败,因为它还没有来自getA() 的结果。解决这个问题的一种方法是,我可以在getA() 中调用getB(),但我认为这不是干净的编码。

有没有办法等到来自getA() 的请求完成后再在onCreateView() 中调用getB()

【问题讨论】:

    标签: android rest asynchronous retrofit


    【解决方案1】:

    您也可以使用 RxJava 中的 ZIP 运算符

    Documentation

    可以找到例子here

    【讨论】:

    • 我正在研究它,但我不明白它是如何工作的。您能否解释一下使用 RXJava 中的 zip 运算符如何使主线程暂停,直到请求完成后再恢复?
    【解决方案2】:

    onResponse 回调改造提供的内部调用 getB()

    call.enqueue(new Callback<Thing>() {
            @Override
            public void onResponse(Call<Thing> call, Response<Thing> response) {
                if (response.isSuccessful) {
                    callB();
                }
            }
    
            @Override
            public void onFailure(Call<Thing> call, Throwable t) {
                // handle failure
            }
        });
    

    以上方法可行,但是,在处理带有改造的 Api 调用时,我是 RxJava 的坚定拥护者。

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 2017-02-21
      • 1970-01-01
      • 2014-05-22
      • 2019-05-08
      相关资源
      最近更新 更多