android - 如何取消处于运行状态的AsyncTask。

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

如果我在 JSON 请求中得到 null 并在我调用 的同一 Activity 中显示消息,是否有任何取消方法可以取消 async 任务>异步任务?

最佳答案

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

关于android - 如何取消处于运行状态的AsyncTask。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13952200/

相关文章:

android - Android - 如何从另一个安装在移动设备上的应用程序中选择文件

java - 通过 OpenCV 在 Android 中使用 native 函数

android - 解析一对多关系

android - 来自服务器的带有数字标记的谷歌地图

android - 如何在 Android 中找到可用的显示分辨率?

java - 如何以编程方式获取颜色属性的值

android - 按钮在 Android 中显示键盘时更改其位置

android - 如何解决某些 Android 设备上前置摄像头视频录制的伪影问题?

android - 如何在 Android 中直接调用电话

android - 发送带有多个附件的电子邮件