gpt4 book ai didi

android - 检查上传进度(适用于 Android 的 Google GMail API)

转载 作者:行者123 更新时间:2023-11-29 19:33:00 30 4
gpt4 key购买 nike

在通过适用于 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com