Android-与mainUi线程同步

Android-与mainUi线程同步,android,Android,如果之前有人问过这个问题,请道歉。。 我是android的新手。。 我正在使用HttpClient从servlet获取响应。。 servlet以JSON对象的形式给出响应。。 我用缓冲读卡器读这个 对于这些东西,我正在使用AsyncTask 下面是代码片段 public void onClickButtonLogin() { button_login.setOnClickListener(new View.OnClickListener() {@ Override

如果之前有人问过这个问题,请道歉。。 我是android的新手。。 我正在使用HttpClient从servlet获取响应。。 servlet以JSON对象的形式给出响应。。 我用缓冲读卡器读这个

对于这些东西,我正在使用AsyncTask

下面是代码片段

public void onClickButtonLogin() {
    button_login.setOnClickListener(new View.OnClickListener() {@
        Override
        public void onClick(View v) {
            if (logInFor.equalsIgnoreCase("Driver")) {
                if (!TextUtils.isEmpty(editText_userName.getText().toString().trim()) && !TextUtils.isEmpty(editText_userName.getText().toString().trim())) {
                    doCheckUserAuthentication(editText_userName.getText().toString(), editText_password.getText().toString());
                    if (isUserAuthenticate) {
                        if (loggedInUser.getRollNo() == 2) {
                            Intent intent = new Intent(getApplicationContext(), TruckingMenuDriverActivity.class);
                            startActivity(intent);
                        } else {
                            Toast toast = Toast.makeText(context, "Invalid username/password", Toast.LENGTH_SHORT);
                            toast.show();
                            editText_userName.setText("");
                            editText_password.setText("");
                        }
                    } else {
                        Toast toast = Toast.makeText(context, "Invalid username/password", Toast.LENGTH_SHORT);
                        toast.show();
                        editText_userName.setText("");
                        editText_password.setText("");
                    }
                } else {
                    Toast toast = Toast.makeText(context, "Invalid username/password", Toast.LENGTH_SHORT);
                    toast.show();
                    editText_userName.setText("");
                    editText_password.setText("");
                }
            }
        }
    });
}

public void doCheckUserAuthentication(String userName, String password) {
    LoginTask task1 = new LoginTask();
    task1.execute(userName, password);
    /*if(task1.getStatus() != AsyncTask.Status.FINISHED){
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }*/
}
所以我试图更新onPostExecute中的isUserAuthenticate变量,但它没有更新。。 如果我第一次尝试tun,第二次尝试true,那么我就错了。我想可能是它的线程同步问题。但是我不知道如何让主UI线程等待unitl AnyncTask线程。完成。。 所以请帮我…我需要做的。。 提前感谢..

    if(isUserAuthenticate){
                            if(loggedInUser.getRollNo() == 2){
                                Intent intent = new Intent(getApplicationContext(),TruckingMenuDriverActivity.class);
                                startActivity(intent);
                            }else{
                                Toast toast = Toast.makeText(context, "Invalid username/password", Toast.LENGTH_SHORT);
                                toast.show();
                                editText_userName.setText("");
                                editText_password.setText(""); 
                            }
                        }else{
                            Toast toast = Toast.makeText(context, "Invalid username/password", Toast.LENGTH_SHORT);
                            toast.show();
                            editText_userName.setText("");
                            editText_password.setText(""); 


 }
...

在onPostExecute内部,问题在于您没有等待AsyncTask完成

final String uname = editText_userName.getText().toString()
final String password = editText_password.getText().toString()
new Thread() {
    @Override
    public void run() {
        doCheckUserAuthentication(uname, password);

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                if (isUserAuthenticate) {
                    if (loggedInUser.getRollNo() == 2) {
                        Intent intent = new Intent(getApplicationContext(), TruckingMenuDriverActivity.class);
                        startActivity(intent);
                    } else {
                        Toast toast = Toast.makeText(context, "Invalid username/password", Toast.LENGTH_SHORT);
                        toast.show();
                        editText_userName.setText("");
                        editText_password.setText("");
                    }
                } else {
                    Toast toast = Toast.makeText(context, "Invalid username/password", Toast.LENGTH_SHORT);
                    toast.show();
                    editText_userName.setText("");
                    editText_password.setText("");
                }

            }
        });
    }

}.start();