2016-09-21 34 views
0

當我通過Gmail Api for Android插入郵件時,試圖獲取有關我的asyncTask進度的信息時,我感到沮喪。檢查上傳的進度(Google GMail API for Android)

我正在嘗試使用MediaHttpUploaderProgressListener,但問題是我只是從插入的getMediaHttpUploader()方法中取出null。

我覺得我失去了一些東西中間大走出getMediaHttpUploader的預期反應...

這是我的代碼:

private class TareaGestionEnvioMails extends AsyncTask<Void, Void, Message> { 
    @Override 
    protected Message doInBackground(Void... params) { 
     try { 
      if (mensaje != null) { 
       String user = "me"; 

       Gmail.Users.Messages.Insert insert = servicioGmail.users().messages().insert(user, mensaje); 
       MediaHttpUploader uploader = insert.getMediaHttpUploader(); 
       //getMediaHttpUploader returns me null value :(
       uploader.setDirectUploadEnabled(false); 
       uploader.setChunkSize(1024*256); 
       uploader.setProgressListener(new FileUploadProgressListener()); 

       mensaje = insert.execute(); 
      } 
      return mensaje; 
     } catch (Exception e) { 
      mLastError = e; 
      cancel(true); 
      return null; 
     } 
    } 
... 

    private class FileUploadProgressListener implements MediaHttpUploaderProgressListener { 

    public FileUploadProgressListener() { 
    } 

    @Override 
    public void progressChanged(MediaHttpUploader mediaHttpUploader) throws IOException { 
     if (mediaHttpUploader == null) return; 
     switch (mediaHttpUploader.getUploadState()) { 
      case INITIATION_STARTED: 
       pantallaPrincipal.onProgresoEnviarMail(0.0, "INITIATION_STARTED"); 
       break; 
      case INITIATION_COMPLETE: 
       pantallaPrincipal.onProgresoEnviarMail(0.0, "INITIATION_COMPLETE"); 
       break; 
      case MEDIA_IN_PROGRESS: 
       double percent = mediaHttpUploader.getProgress() * 100; 
       pantallaPrincipal.onProgresoEnviarMail(percent, "MEDIA_IN_PROGRESS"); 
       break; 
      case MEDIA_COMPLETE: 
       pantallaPrincipal.onProgresoEnviarMail(100.0, "MEDIA_COMPLETE"); 
     } 
    } 
} 

謝謝大家!這是我第一次發佈在Stackoverflow上!

回答

0

解決!!!!

您必須使用insert()方法的三個參數版本。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
myMimeMessage.writeTo(baos); 
AbstractInputStreamContent mediaContent = new ByteArrayContent("message/rfc822", baos.toByteArray()); 
Gmail.Users.Messages.Insert insert = servicioGmail.users().messages().insert(user, null, mediaContent); 

有兩件事情你必須要知道的:我已經這樣充滿第三個參數與我的MimeMessage

1)如果繼續使用「消息」和「AbstractInputStreamContent」這兩個參數同時出現,你會對小信息感到滿意......但是如果你不得不上傳大於1mb左右的消息,你會得到一個可怕的400 Bad_Request異常,其中「Request too large 「錯誤。所以,保留Message參數爲空。 2)將「消息」參數留空,您不能設置消息的標籤 ...所以您將不得不稍後使用users()。messages()來填充消息。 修改方法。

如果任何人有一個更好的解決方法來同時插入一個大郵件和它的標籤,並有進展的反饋,請評論!謝謝!