제 경우는 두 개의 HTTP get 요청과 함께 서버에서 두 세트의 데이터를 가져와 함께 처리해야한다는 것입니다.loopj HTTP 라이브러리를 사용하여 두 개의 비동기 HTTP 요청을 완료하는 방법
나는이 작업을 수행하기 위해 loopj의 http 라이브러리를 사용하고있다.
문제는 loopj의 http가 Async이므로 완료 시점과 완료 시점을 결정할 수 없음을 의미합니다. 모두 자체 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를 설정하고, && b가 false이기 때문에 계속 진행할 수 없습니다. 두 번째 호출이 돌아오고, var를 설정하면 && b가 참이고 처리가 계속됩니다. –
답장을 보내 주셔서 감사합니다. 문제는 그런 식으로 작동하지 않는 것 같습니다. 따라서 onSuccess 메소드가 메인 쓰레드에서 실행 중일 때 메인 쓰레드에서 'wait'함수를 사용하면 onSuccess 실행을 막을 수 있습니다! 따라서 우리는 체커를 변경할 기회가 없습니다. –