2016-09-21 3 views
0

Android用Gmail API経由でメールを挿入しているときに、自分のasynctaskの進行状況に関する情報を取得しようとしています。アップロードの進捗状況を確認してください(Android用Google Gmail API)

私はMediaHttpUploaderProgressListenerを使用しようとしていますが、問題はちょうど挿入のgetMediaHttpUploader()メソッドからヌルを取得してしまうことです。

私はこれが私のコードである

...私は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()メソッドの3つのパラメータバージョンを使用する必要があります。

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例外が発生します"エラー。したがって、Messageパラメータはnullのままにしておきます。

2) "Message"パラメータをnullのままにしておくと、メッセージのラベル...を設定できません。後でusers()。messages()を使用して記入する必要があります。 の方法を変更する。

大きなメールを挿入する際の回避策があり、同時にそのラベルがあり、進捗状況のフィードバックがある場合は、コメントしてください。ありがとう!

関連する問題