2014-01-12 4 views
1

Я создаю AsyncTask для загрузки или загрузки файлов на своем Google Диске.Android Как остановить/убить/отменить загрузку или загрузку Загрузка

Это пример части моего кода для загрузки файла:

public class AsyncUpload extends AsyncTask<String, String, String>{ 

    Context c; 



    public AsyncUpload(Context c) { 
     super(); 
     this.c = c; 
    } 


    @Override 
    protected String doInBackground(String... params) { 



     try{ 

      // File's binary content 
      java.io.File fileContent = new java.io.File(localFilePath); 

      InputStreamContent mediaContent = new InputStreamContent(FileInfo.getMime(localFilePath), new BufferedInputStream(new FileInputStream(fileContent))); 
      mediaContent.setLength(fileContent.length()); 


      // File's metadata. 
      File body = new File(); 
      body.setTitle(fileContent.getName()); 
      body.setMimeType(FileInfo.getMime(localFilePath)); 

      if(parentId!=null){ 
       ParentReference parent = new ParentReference(); 
       parent.setId(parentId); 
       body.setParents(Arrays.asList(parent)); 
      } 


      Drive.Files.Insert request = drive.files().insert(body, mediaContent); 
      MediaHttpUploader uploader = request.getMediaHttpUploader(); 
      uploader.setDirectUploadEnabled(false); 
      uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE); 
      uploader.setProgressListener(mediaHttpUploaderProgressListener); 
      File file = request.execute(); 
      if (file != null) { 
       Log.i(TAG,"File Uploaded"); 
       isAttempt=false; 
       return file; 
      } 

     } catch (IOException e) { 
      Log.e(TAG,"IOEXCEPTION Message:\n"+e.getMessage()); 
     } 


     return null; 
    } 

} 

Этот код работает отлично, но я не знаю, как остановить его, пока файл загрузки (или загрузки с аналогичный код)!

Пожалуйста, помогите!

Большое спасибо

+0

спасибо @RohanKandwal, но есть ли код, чтобы остановить загрузку/загрузку во время работы? – Meroelyth

ответ

2

попробовать это: первый вызов отмены метода на экземпляре AsyncTask

findViewById(R.id.cancelButton).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      mTask.cancel(true); 
     } 
    }); 

Затем вам необходимо добавить проверьте, была ли ваша асинхронная задача отменена:

@Override 
    protected String doInBackground(String... params) { 

     try{ 
      // File's binary content 
      java.io.File fileContent = new java.io.File(localFilePath); 
      final FileInputStream fileStream = new FileInputStream(fileContent); 
      InputStreamContent mediaContent = new InputStreamContent(FileInfo.getMime(localFilePath), new BufferedInputStream(fileStream)); 

      .... 

      uploader.setProgressListener(new MediaHttpUploaderProgressListener() { 
       void progressChanged(MediaHttpUploader uploader) { 
        if(isCancelled()) { 
         // could not find another way to cancel transferring except that: 
         fileStream.close(); 
        } 
        else { 
         mediaHttpUploaderProgressListener(uploader); 
        } 
       } 
      }); 

      .... 

     } catch (IOException e) { 
      Log.e(TAG,"IOEXCEPTION Message:\n"+e.getMessage()); 
     } 

     return null; 
    } 

Надеюсь, что это сработает.

Необходимо добавить следующее - это не «правильный» способ реализации операций переноса. Имейте в виду, что ваша деятельность может быть остановлена ​​и даже уничтожена, а затем снова создана, пока вы работаете. Событие хуже может случиться. Запуск AsyncTask не может предотвратить уничтожение всего приложения, когда у системы заканчивается память, а передача продолжается, если ваше приложение не имеет активности на переднем плане. В этом случае передача может даже не завершиться.

Возможно, было бы лучше рассмотреть возможность переноса операций переноса на выделенный сервисный компонент.

+0

Спасибо очень очень очень очень! Он отлично работает! Теперь я использую этот код на службе !!! Ты лучший! – Meroelyth

0

Если отменить AsyncTask тогда ваш скачать и загрузить автоматически отменяют

if(mTask!=null) mTask.cancel(); 

Благодаря

+0

Вы должны проверить на isCancelled внутри doInBackground и прекратить обработку самостоятельно –

+0

Большое спасибо, но какой код мне нужно использовать? Пожалуйста, дайте мне пример о том, как остановить процесс (загрузить/загрузить) ... – Meroelyth

+0

Как запустить этот AsyncUpload ??? –

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