0

コード内の 2 か所でハンドラーを使用しています。私のコードは次のとおりです。

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();
                    };
                });
    }
};

私が直面している問題は、コードの 2 番目の部分 (if ステートメントの後の部分) が実行され、最初の部分の前に終了することです。

第 2 部が始まる前に第 1 部が終了するようにするには、どうすればよいですか。

4

2 に答える 2

3

Runnable は、別のスレッドで実行されるコードに使用されます。特定の順序を強制するには、任意の同期方法を使用します。1 つのスレッドが最初のスレッドからのイベントを待機し、その後そのコードを実行することができます。

于 2012-10-10T18:37:55.973 に答える
1

上記の非同期コード、つまりがあるため、非同期セマフォAsyncHttpResponseHandlerを使用できます。

セマフォを使用すると、特定の非同期イベントが発生するまで、メカニズムまたはコードの一部を実行からロックできます。

于 2012-10-10T18:37:54.913 に答える