我正在尝试在我的应用中创建一个登录信息。
这是我的登录活动,我在那里创建了一个Asynktask,如果getUser()的结果为null,我想要取消。
public class Login extends AsyncTask<String, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(String... params) {
ArrayList<String> userValues = new ArrayList<String>();
userValues.add(((EditText)findViewById(R.id.usermail)).getText().toString());
userValues.add("john");
if((response = new Database().getUser(userValues)) == "null") {
cancel(true);
}
return null;
}
@Override
protected void onCancelled() {
Toast.makeText(getApplicationContext(), "Not registered", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostExecute(Void result) {
Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
super.onPostExecute(result);
}
}
}
如果Database.getUser()返回的值返回“null”,我希望取消“login”的过程。但它似乎不起作用,我不知道我做错了什么或者我忘记了什么。
非常感谢你。
答案 0 :(得分:1)
cancel(allowInterrupt)
调用此方法将导致调用onCancelled(Object) 在doInBackground(Object [])返回后的UI线程上。打电话给这个 方法保证永远不会调用onPostExecute(Object)。
话虽如此,使用可以使用以下方法:
public class Login extends AsyncTask<String, Boolean, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
if (getUser() == null){
// exit from this doInBackground and proceed to postExecute
return false;
}
// continue
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if (result){
// succes
}else {
// cancelled
}
}
}
}
答案 1 :(得分:0)
尝试取消执行此任务。如果任务已经完成,已经取消或由于某些其他原因无法取消,则此尝试将失败。 在我看来,你可以根据用户可以登录的结果集标志处理onpost执行的登录过程