Android設計不允許網絡在主線程上強制它,但它不是一個好的做法。所以我想同步主線程和另一個線程,以便我可以從數據庫獲取用戶身份驗證的響應。我同步不工作..Android與其他線程的主線程之間同步
這是在主線程的代碼..
if (loginBTN.getId() == ((Button) v).getId()) {
String emailId = loginField.getText().toString().trim();
String password = passwordField.getText().toString().trim();
postParameters.add(new BasicNameValuePair("username", emailId));
postParameters.add(new BasicNameValuePair("password", password));
try {
System.out.println("b4 response" + responseToString);
checkLogin();
System.out.println("after response" + responseToString);
synchronized (this) {
while (isAvailable == false) {
wait();
}
if (responseToString.equalsIgnoreCase("1")) {
statusLBL.setText("Login Successful...");
}
else {
statusLBL.setText("Sorry Incorrect Username or Password...");
}
}
}
catch (Exception e) {
statusLBL.setText(e.toString());
}
}
private void checkLogin() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient http = new DefaultHttpClient();
HttpPost request = new HttpPost("http://example.org/api/android_gradhub/login_user.php");
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response = http.execute(request);
HttpEntity entity = response.getEntity();
// responseToString = EntityUtils.toString(entity);
synchronized (this) {
while (isAvailable == true) {
wait();
}
responseToString = EntityUtils.toString(entity);
notifyAll();
}
System.out.println("response " + responseToString);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
什麼問題? –
你的問題是什麼? – Daniel
同步不起作用.. – user2421377