2012-10-10 158 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」。你指哪一個? – alfasin

+0

我指的是'if(!doValidations()||''isConnectedToInternet()){' 'return;' '}' – Ankush

回答

1

由於上面有異步代碼,即AsyncHttpResponseHandler,您可以使用asynchronous semaphore

信號量啓用鎖定一個機制或一段代碼執行,直到發生某個異步事件。

3

Runnable用於在單獨的線程上執行的代碼。要強制執行特定訂單,請使用您喜歡的任何同步方法。一個線程可以等待來自第一個線程的事件,然後執行其代碼。