Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 改造:如何等到请求调用完成后再执行下一行代码?_Android_Rest_Asynchronous_Retrofit - Fatal编程技术网

Android 改造:如何等到请求调用完成后再执行下一行代码?

Android 改造:如何等到请求调用完成后再执行下一行代码?,android,rest,asynchronous,retrofit,Android,Rest,Asynchronous,Retrofit,我有2种REST请求方法getA()和getB()。两者都是使用call.enqueue()的异步调用在获得getA()的结果之前,我无法调用getB()。 在onCreateView()中,我将连续调用getA()和getB()。但是,getB()将失败,因为它还没有来自getA()的结果。解决这个问题的一种方法是,我可以在getA()内部调用getB(),但我认为这不是干净的编码 在调用onCreateView()中的getB()之前,是否有方法等待来自getA()的请求完成?从onRes

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

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

在调用
onCreateView()
中的
getB()
之前,是否有方法等待来自
getA()
的请求完成?

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
        }
    });
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issucessful){
callB();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
//处理失败
}
});

但是,在使用改型处理Api调用时,我强烈支持使用RxJava。

您也可以使用RxJava中的
ZIP
操作符


例如,我正在研究它,但我不了解它是如何工作的。您能否解释一下,使用RXJava中的
zip
操作符如何使主线程暂停,直到请求完成后再继续?