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