2013-04-23 3 views
-1

Je ne suis pas en mesure d'annuler le téléchargement d'image du tout. Je l'ai googlé plusieurs fois à la recherche d'un moyen d'annuler HttpPost et tous échoué. Si j'annule l'image de processus en cours de téléchargement, dites-lui que c'est fini. S'il vous plaît pour une aide, voici mon code ce que je pagaille:Comment annuler ou annuler le téléchargement d'une image HttpPost?

private class shareIt extends AsyncTask<HttpResponse, Integer, HttpResponse> { 
    long totalSize; 
    String serverResponse = null; 
    ProgressDialog pd; 
    String filepath, ar_name, en_name, serverurl = null; 
    JSONObject jsonr = null; 

    HttpClient httpClient; 
    HttpContext httpContext; 
    HttpPost httpPost; 

    public shareIt(String filepath, int share_code) { 
     this.filepath = filepath; 
     this.serverurl = Api.upload_url(share_code); 
    } 

    public shareIt(String filepath, int share_code, String ar_name, String en_name) { 
     this.ar_name = ar_name; 
     this.en_name = en_name; 
     this.filepath = filepath; 
     this.serverurl = Api.upload_url(share_code) + "&ar_name="+ar_name+"&en_name="+en_name; 
    } 

    @Override 
    protected void onPreExecute() { 
     pd = new ProgressDialog(File_Share.this); 
     pd.setMessage("hora"); 
     pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     pd.setCancelable(false); 
     pd.setIndeterminate(false); 
     pd.setIcon(android.R.drawable.ic_menu_upload); 

     //cancel button 
     pd.setButton(DialogInterface.BUTTON_NEGATIVE, "cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       pd.dismiss(); 
       cancel(true); 
      } 
     }); 

     pd.show(); 
    } 

    @Override 
    protected HttpResponse doInBackground(HttpResponse... arg0) { 
     httpClient = new DefaultHttpClient(); 
     httpContext = new BasicHttpContext(); 
     httpPost = new HttpPost(serverurl); 

     try { 
      CustomMultiPartEntity multipartContent = new CustomMultiPartEntity(new ProgressListener() { 
       @Override 
       public void transferred(long num) { 
        publishProgress((int) ((num/(float) totalSize) * 100)); 
       } 
      }); 

      multipartContent.addPart("file", new FileBody(new File(filepath))); 
      totalSize = multipartContent.getContentLength(); 

      httpPost.setEntity(multipartContent); 
      HttpResponse response = httpClient.execute(httpPost, httpContext); 

      serverResponse = EntityUtils.toString(response.getEntity()); 

      return null; 

     } catch (Exception e) { 
      Log.e("uploader", "Uploading Error : "+ e.getMessage()); 
     } 

     return null; 
    } 
    @Override 
    protected void onCancelled() { 
     httpPost.abort(); 
     httpClient.getConnectionManager().shutdown();  
    } 

    @Override 
    protected void onProgressUpdate(Integer... progress) { 
     pd.setProgress((int) (progress[0])); 
    } 
} 

Répondre

1

Le problème est que si vous jus cancle votre tâche onCancelled() est appelée après doInBackground() finitions. Cela signifie que si vous avez commencé à télécharger votre image au doInBackground(), la tâche ne sera pas interrompue tant que le téléchargement ne sera pas terminé. Tous les appels cancel() en tant que tels empêchent onPostExecute() de s'exécuter en appelant `onCancelled() 'à la place.

Si vous appelez cancel(true) sur votre tâche, puis vérifiez la tâche. isCancelled() à partir de votre méthode doInBackground(), vous devriez être en mesure d'interrompre doInBackground() et arrêter le téléchargement.

+1

je l'ai déjà fait mais l'image ne s'arrêtera pas de télécharger, même problème! –

Questions connexes