2013-07-19 67 views
0

并道歉如果这个问题之前被问到.. 我是新手到android ..我使用HttpClient从servlet获取响应.. 和servlet给我答复作为JSON对象.. 和我读这使用缓冲读者..Android - 与mainUi线程同步

这个东西,我使用的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(); 
     } 
    }*/ 
} 

小号我试图更新isUserAuthenticate变量onPostExecute但它不更新.. 如果我第一次尝试tun和ture在第二..我认为可能是它的线程syncronization问题..但我不知道热做主UI线程等待单元AnyncTask线程。完成.. 所以请帮助我..what我需要做的..提前 谢谢..

回答

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