2013-04-23 3 views
-1

Я вообще не могу прекратить загрузку изображений. Я много раз искал любой способ отменить HttpPost, и все не удалось. Если я отменим загрузку образа процесса, скажите, что он закончен. Пожалуйста, для некоторой помощи, ниже мой код, что я беспорядок:Как отменить или отменить загрузку изображения 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])); 
    } 
} 

ответ

1

Проблема заключается в том, если вы Jus CANCLE ваша задача onCancelled() вызывается после doInBackground() отделки. Это означает, что если вы загрузили свое изображение в doInBackground(), задача не будет перегружена до завершения загрузки. Все вызовы cancel() сами по себе - это предотвращать запуск onPostExecute() путем вызова `onCancelled() '.

Если вы вызываете cancel(true) в свою задачу, а затем проверяете задачу. isCancelled() из вашего метода doInBackground() вы должны иметь возможность прервать doInBackground() и остановить загрузку.

+1

Я готов сделать это, но все же изображение не будет прекращено, такая же проблема! –

Смежные вопросы