Android 如何在运行状态下取消异步任务。
当json请求带有空值时,我想取消AsyncTask, 并显示Toast消息Android 如何在运行状态下取消异步任务。,android,android-layout,android-intent,Android,Android Layout,Android Intent,当json请求带有空值时,我想取消AsyncTask, 并显示Toast消息 private class PostTask extends AsyncTask<String, Integer, String> { //Before running code in the separate thread @Override protected void onPreExecute() { progressDialog = new Pro
private class PostTask extends AsyncTask<String, Integer, String>
{
//Before running code in the separate thread
@Override
protected void onPreExecute()
{
progressDialog = new ProgressDialog(login.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("please wait...");
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(false);
progressDialog.setMax(100);
progressDialog.setProgress(0);
progressDialog.show();
}
//The code to be executed in a background thread.
@Override
protected String doInBackground(String... params)
{
String url=params[0];
Parser parse = new Parser();
try{
String email = textinput.getText().toString();
String pass = password.getText().toString();
JSONObject JsonString = parse.getJSONFromUrl(url,email,pass);
//String email = JsonString.getString("email");
Constants.ID = JsonString.getString("id");
}
catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NullPointerException e){
publishProgress(1);
//Toast.makeText(login.this, "Invalid credentials", Toast.LENGTH_LONG).show();
}
return "All Done!";
}
//Update the progress
@Override
protected void onProgressUpdate(Integer... values)
{
//set the current progress of the progress dialog
// progressDialog.setProgress(values[0]);
//Toast.makeText(login.this, "Invalid credentials", Toast.LENGTH_LONG).show();
}
//after executing the code in the thread
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
startActivity(new Intent("com.example.mysampleapp.DASHBOARDTAB"));
progressDialog.dismiss();
}
}
私有类PostTask扩展了AsyncTask
{
//在单独的线程中运行代码之前
@凌驾
受保护的void onPreExecute()
{
progressDialog=新建progressDialog(login.this);
progressDialog.setProgressStyle(progressDialog.STYLE_微调器);
progressDialog.setMessage(“请稍候…”);
progressDialog.setCancelable(假);
progressDialog.setUndeterminate(false);
progressDialog.setMax(100);
progressDialog.setProgress(0);
progressDialog.show();
}
//要在后台线程中执行的代码。
@凌驾
受保护的字符串doInBackground(字符串…参数)
{
字符串url=params[0];
Parser parse=新解析器();
试试{
字符串email=textinput.getText().toString();
字符串pass=password.getText().toString();
JSONObject JsonString=parse.getJSONFromUrl(url、电子邮件、密码);
//String email=JsonString.getString(“电子邮件”);
Constants.ID=JsonString.getString(“ID”);
}
捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
捕获(NullPointerException e){
出版进度(1);
//Toast.makeText(login.this,“无效凭证”,Toast.LENGTH_LONG.show();
}
返回“全部完成!”;
}
//更新进度
@凌驾
受保护的void onProgressUpdate(整型…值)
{
//设置“进度”对话框的当前进度
//progressDialog.setProgress(值[0]);
//Toast.makeText(login.this,“无效凭证”,Toast.LENGTH_LONG.show();
}
//在线程中执行代码之后
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
startActivity(新的意图(“com.example.mysampleapp.DASHBOARDTAB”);
progressDialog.disclose();
}
}
如果我在JSON
请求中获得null,并在调用AsyncTask
的同一活动中显示消息,是否有任何取消方法来取消async
任务?尝试以下操作:
postTask = new PostTask();
if (postTask != null)
{
postTask.cancel(true);
postTask = null;
}
谢谢。如果JSON为空,请尝试返回错误代码,例如:
catch (NullPointerException e){
publishProgress(1);
return "Error";
}
然后在onPostExecute()
中:
检查此链接取消异步任务示例的可能重复项取消异步任务示例
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result.equals("Error")) {
//Error
} else {
startActivity(new Intent("com.example.mysampleapp.DASHBOARDTAB"));
progressDialog.dismiss();
}
}