2012-10-10 8 views
0

코드에서 두 곳에서 처리기를 사용하고 있습니다. 내 코드는 다음과 같다 :코드 실행 순서

public void onClick(View v) { 
     vibrator.vibrate(Constants.DEFAULT_VIBRATE_TIME); 

     checkPassword(); 

     List<NameValuePair> userDetails = new ArrayList<NameValuePair>(); 
     Utils.addCustomerLoginDetail(userDetails); 
     final ProgressDialog progress = ProgressDialog.show(
       ChangePasswordActivity.this, "", "Saving Please wait.."); 
     Ola.asyncHttpClient.get(HttpCommunicator.getFilledUrl(
       UrlConstants.AUTH_SEND_LOGIN_INFO_URL, userDetails), 
       new AsyncHttpResponseHandler() { 
        public void onSuccess(String arg0) { 
         serverResponse = arg0; 
         handler.post(new Runnable() { 

          @Override 
          public void run() { 
           verifyLoginDetails(); 
          } 
         }); 
        }; 

        @Override 
        public void onFinish() { 
         if(isRunning()) 
          progress.dismiss(); 
        }; 
       }); 

     if (!doValidations() 
       || !isConnectedToInternet()) { 
      return; 
     } 
     updateCustomerDetails(); 
     List<NameValuePair> list = new ArrayList<NameValuePair>(); 
     Utils.addUserId(list); 
     Utils.addCustomerPassword(list); 
     final ProgressDialog progressDialog = ProgressDialog.show(
       ChangePasswordActivity.this, "", "Saving Please wait.."); 

     Ola.asyncHttpClient.get(HttpCommunicator.getFilledUrl(
       UrlConstants.AUTH_UPDATE_PROFILE_URL, list), 
       new AsyncHttpResponseHandler() { 
        public void onSuccess(String arg0) { 
         serverResponse = arg0; 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           sendCustomerDetailsToServer(); 
          } 
         }); 
        }; 

        public void onFailure(Throwable arg0, String arg1) { 
         showOlaDialog(Ola.NO_CONNECTIVITY); 
        }; 

        @Override 
        public void onFinish() { 
         if(isRunning()) 
          progressDialog.dismiss(); 
        }; 
       }); 
    } 
}; 

내가 직면하고있어 문제는 코드합니다 (if 문 뒷부분)의 두 번째 부분이 실행됩니다 및 첫 번째 부분 전에 완료한다는 것입니다.

두 번째 부분이 시작되기 전에 첫 번째 부분이 완료되도록하려면 어떻게해야합니까?

+0

"부품"은 무엇입니까? 일을 비동기 적으로 수행하면 정의에 따라 어떤 순서로 끝나는 지 신경 쓰지 않아도됩니다. – geoffspear

+1

코드에 'if'가 3 개 발견되었습니다. 그 중 어느 쪽을 가리키고있는거야? – alfasin

+0

나는'if (! doValidations() ||'! isConnectedToInternet()) {' 'return;' }}' – Ankush

답변

1

위의 비동기 코드 인 AsyncHttpResponseHandler이 있으므로 asynchronous semaphore을 사용할 수 있습니다.

세마포는 특정 비동기 이벤트가 발생할 때까지 메커니즘이나 코드 조각을 실행에서 잠글 수 있습니다.

3

Runnable은 별도의 스레드에서 실행되는 코드에 사용됩니다. 특정 주문을 강요하려면 원하는 동기화 방법을 사용하십시오. 한 스레드는 이벤트를 첫 번째 스레드에서 대기 한 후 코드를 실행할 수 있습니다.