当我的应用程序第一次启动以从本地移动数据库中获取数据库中的所有数据时,我需要调用12个Web API,我正在使用凌空。 我的要求是,如果在12个Web API中,任何一个因网络错误或超时或任何其他问题而失败,那么凌空执行必须在同一时刻停止。 任何人请告诉我怎么做。
我已经尝试过清除缓存以及取消凌空的错误方法,但我仍在寻找其他网络API的响应。
调用Web AP
for (String data : mWebApiList) {
switch (data) {
//Dashboard
case data1:
webAPICalling.callDashBoardApi(mContext, this);
break;
//Loan Type
case data2:
webAPICalling.callLoanTypeWebApi(mContext, this);
break;
//Help FAQs
case data3::
webAPICalling.callHelpFaqsWebAPI(mContext, this,false);
break;
:
:
break;
}
}
错误我正在取消所有请求,但是假设3和7 web api失败,仍然成功的是要求所有4 5 6 8 9并且7的错误也是如此。我希望在3之后没有其他网络API可以执行。
public void onError(String status) {
SFApplication. getInstance().getRequestQueue().clearAll(TAG);
SFApplication.getInstance().getRequestQueue().getCache().clear();
}
答案 0 :(得分:1)
您可以尝试依次为每个请求调用cancel()
,尽管这也是cancelAll(TAG)
的作用。
还有更多信息here以及如何取消请求。
问题是,它只保证不调用您的请求处理程序,但它可能不会阻止请求完成。也就是说,可能会发生完整的HTTP请求 - 响应舞蹈,只是在调用响应处理程序之前,库检查请求是否未被取消。查看NetworkDispatcher.java,ExecutorDelivery.java和Request.java似乎也证实了这一点(搜索取消)。
您可以尝试指定单个执行程序线程,因此请求会以串行方式发送,但在正常情况下,所有12个请求都会正常运行,您的性能会更差。
答案 1 :(得分:0)
是的,就像@Horia所说的那样,凌空请求会被并行调用。对于您正在尝试的要求,可以通过嵌套web api调用来实现,例如在第一个api成功后执行下一个web api,依此类推。我希望这会有所帮助。