android asynctask取消不起作用

时间:2013-11-16 12:50:07

标签: java android

我正在尝试在我的应用中创建一个登录信息。

这是我的登录活动,我在那里创建了一个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”的过程。但它似乎不起作用,我不知道我做错了什么或者我忘记了什么。

非常感谢你。

2 个答案:

答案 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执行的登录过程