0

如果之前有人问过这个问题并道歉..我是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 变量,但它没有更新..如果我首先尝试在第二个中调整和 ture,我会变得错误..我认为可能是它的线程同步问题..但我不知道要让 main UI 线程等待 unitl AnyncTask 线程。完成..所以请帮助我..我需要做什么..在此先感谢..

4

2 回答 2

1

问题是您没有等待 AsyncTask 完成。作为 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();
于 2013-07-19T06:22:14.657 回答
0

    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 里面

于 2013-07-19T06:15:54.843 回答