2014-09-04 2 views
0

Я пытаюсь отменить мой запрос, когда пользователь вернется или закроет Dialog.but, он выполняет хотя бы один раз, даже если я его отменил. sendPost является использование для загрузки картинок .I хотите, когда пользователь отменить диалог, то запрос не должен выполнитьКак отменить AsyncTask

private class sendd extends AsyncTask<Void, Void, Void> { 
    String success, mess, response, user; 
    Button next; 
    ProgressDialog pDialog; 

    public sendd(Context ctx) { 
     pDialog = new ProgressDialog(FilenewReport.this); 
     pDialog.setMessage("Updating "); 
     pDialog.setCancelable(true); 
     pDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 
      @Override 
      public void onCancel(DialogInterface dialog) { 
       // actually could set running = false; right here, but I'll 
       // stick to contract. 
       running = false; 
       // cancel(true); 
       sends.cancel(true); 
      } 
     }); 

    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog.show(); 
    } 

    @Override 
    protected void onCancelled() { 
     sends.cancel(true); 
     running = false; 

    } 

    @SuppressLint("NewApi") 
    @Override 
    protected Void doInBackground(Void... params) { 
     while (running) { 

      try { 
       sendPost(file_url, imagepath); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } catch (Exception e) { 
       // } 
      } 
      // if (check == false || isCancelled()) { 
      // break; 
      // } 
     } 
     return null; 

    } 

    @Override 
    protected void onPostExecute(Void notUsed) { 

     pDialog.dismiss(); 

    } 

} 
+0

Фактически, если инициировано сообщение для загрузки на сервер, то отмена задачи остановит дальнейшее выполнение задачи, но не остановит инициированную связь. Даже если вы сбросите соединения, то и то, что уже было отправлено, будет записано на стороне сервера , ya, но поскольку вы отменили отмену, вы не сможете получить ответ от сервера. –

+0

Я получаю ответ также – user3405716

+0

ОК, так что это может происходить во фракции. –

ответ

0

использовать это, чтобы отменить запрос в doInBackground:

httpclient.getConnectionManager().shutdown(); 

метод onPostExecute не будет выполняться в этом случае.

+0

нить Thread = новая тема (новый Runnable() { \t \t \t \t \t \t @Override \t \t \t \t \t \t общественности недействительным запуска() { \t \t \t \t \t \t \t попробовать { \t \t \t \t \t \t \t \t.\t \t \t \t \t \t \t \t httpclient.getConnectionManager() отключение(); \t \t \t \t \t \t \t \t Log.i ("закрыть", "закрыто"); \t \t \t \t \t \t \t} улов (Исключение е) { \t \t \t \t \t \t \t \t е.printStackTrace(); \t \t \t \t \t \t \t} \t \t \t \t \t \t} \t \t \t \t \t}); \t \t \t \t \t thread.start(); – user3405716

+0

пример отмены асинтезы http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

0

Добавить в начале цикла, а в вашей doInBackground:

if (isCancelled()) { 
    return null; 
} 

onPostExecute не будет выполнен после этого, только onCancelled.

+0

это хороший способ? pDialog.setOnCancelListener (новый OnCancelListener() { \t \t \t \t @Override \t \t \t \t недействительным OnCancel (диалог общественности DialogInterface) { \t \t \t \t \t // на самом деле может установить работает = ложь; здесь, но я буду \t \t \t \t \t // придерживаться контракта. \t \t \t \t \t runOnUiThrea д (новый Runnable() {\t \t \t \t \t \t общественного недействительными запуска() { \t \t \t \t \t \t \t httpclient.getConnectionManager() отключение(). \t \t \t \t \t \t} \t \t \t \t \t}); \t \t \t \t} \t \t \t}); – user3405716