我有一个AsyncTask执行HttpPost请求,我有一个字段是人们把他们的电子邮件,并有一个方法,检查正确的电子邮件 . 如果电子邮件验证错误,我想要取消我的AsyncTask . 我尝试了几件事,没有任何作用,这是我的代码..
//check if email is valid
public boolean isEmailValid(String email) {
boolean isValid = false;
String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
CharSequence inputStr = email;
Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
return true;
}
return false;
}
// AsyncTask
private class DownloadFilesTask extends AsyncTask<String,String,String> {
String email;
@Override
protected void onPreExecute() {
super.onPreExecute();
Email= (EditText)findViewById(R.id.email);
email= Email.getText().toString().trim();
if(isEmailValid(email)== false){
Toast.makeText(Registration.this,"Not a valid Email",Toast.LENGTH_LONG).show();
// I would like to cancel Async here and return but this is a type Void
}
}
@Override
protected String doInBackground(String... params) {
// HttpPost stuff here I return a type String
}
// @Override
protected void onPostExecute(String file_uri) {
// post stuff
}
}
我的 onPreExecute() 是void类型,我尝试将其更改为类型Boolean但我在不兼容类型上遇到不匹配 . 我的doinBackground必须有String类型,因为我正在返回 onPostExecute . 如果电子邮件返回false任何建议,我只是想中止AsyncTask?
2 回答
IMO you should check it before running asyncTask ,但是如果你想要你的方式 - 你可以将一些全局变量设置为
false
并返回它,然后在doInBackground
方法中检查此变量并将其返回到onPostExecute
.许多可能性之一:
即使您拨打
cancel(true)
,我们也无法取消AsyncTask
. 该线程将继续在后台运行,但不会返回结果 . 我已经在一个月内完成了自己的实验取消它 . 但是,没有什么可以阻止它的线索并让我感到压力 . 所以我决定搬到IntentService
.由于
AsyncTask
仅用于短时间内的单个任务,因此比使用IntentService
更好,这是用于长时间运行的任务 . 但是,如果您想要停止自己的线程中包含的任务,我建议您使用IntentService
或Service
.