- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在通过适用于 Android 的 Gmail Api 插入邮件时,我试图获取有关异步任务进度的信息时感到很沮丧。
我正在尝试使用 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 上发帖!
最佳答案
解决了!!!!
您必须使用 insert() 方法的三参数版本。我用我的 MimeMessage 这样填充了第三个参数:
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);
有两点需要注意:
1) 如果您继续同时使用“Message”和“AbstractInputStreamContent”参数,您会对小消息感到满意...但是如果您必须上传大于 1mb 左右的消息,您将收到一个可怕的 400 Bad_Request 异常,并显示“请求太大”错误。因此,将 Message 参数保留为空。
2) 将“Message”参数留空,您将无法设置消息的Label...因此您稍后必须使用users().messages() 来填充它。 修改方法。
如果有人有更好的解决方法来同时插入一个大邮件和它的标签,并且有进度反馈,请评论!谢谢!
关于android - 检查上传进度(适用于 Android 的 Google GMail API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39628103/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!