代码执行顺序

时间:2012-10-10 18:32:02

标签: android handler

我在代码中的两个地方使用了一个处理程序。我的代码如下:

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语句之后的部分)被执行并在第一部分之前完成。

在第二部分开始之前,我需要做些什么来确保第一部分完成。

2 个答案:

答案 0 :(得分:3)

Runnable用于在单独的线程上执行的代码。要强制执行特定订单,请使用您喜欢的任何同步方法。一个线程可以等待来自第一个线程的事件,然后执行其代码。

答案 1 :(得分:1)

由于上面有异步代码,即AsyncHttpResponseHandler,您可以使用asynchronous semaphore

信号量允许锁定机制或代码段执行,直到发生某个异步事件。