Android 如何在运行状态下取消异步任务。

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

当json请求带有空值时,我想取消AsyncTask, 并显示Toast消息

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();      
      }
 }