2012-10-10 34 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用于在单独的线程上执行的代码。要强制执行特定订单,请使用您喜欢的任何同步方法。一个线程可以等待来自第一个线程的事件,然后执行其代码。