【发布时间】:2015-02-15 06:17:14
【问题描述】:
我的情况是我需要通过两个 HTTP 获取请求从服务器获取两组数据,然后将它们一起处理。
我正在使用 loopj 的 http 库来完成任务。
问题是因为loopj的http是异步的,这意味着我无法确定它们什么时候完成,哪个先完成。它们都有自己的onSuccess函数。我尝试在它们每个中放置一个布尔标志,并让调用活动检查这两个布尔值的 AND 操作的变化,但似乎如果我让主线程等待,onSuccess 函数也会等待......
有没有办法可以确定两个请求何时都完成,然后我可以继续下一步?
代码如下:
在通话活动中:
boolean A;
boolean B;
HttpRequestA();
HttpRequestB();
while (!(A&&B)) {
Thread.sleep(100);
}
HttpRequestA 是:
public void HttpRequestA() {
A = false;
HTTPService.get(url, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] header, String responseString, Throwable throwable) {
}
@Override
public void onSuccess(int statusCode, Header[] header, String responseString) {
A = true;
}
});
}
【问题讨论】:
-
几乎你所拥有的:你的 A、B 变量。每个成功函数将适当的布尔值设置为 TRUE,然后调用 can_i_proceed(),它执行
if (a && b) { proceed(); }。第一个调用返回,设置它的 var,并且由于 a && b 为假而无法继续。第二个调用返回,设置它的 var,现在 a && b 为真,处理继续。 -
感谢您的回复。问题是它似乎不是那样工作的。所以如果onSuccess方法也在主线程上运行,所以我们在主线程上有一个'wait'函数,它会阻塞onSuccess的运行!所以我们没有机会更改检查器。
标签: android android-asynctask androidhttpclient loopj