为什么DriveFile openContents间歇性地导致失败?
问题描述:
我的Android应用程序可以让Google Drive挑选一个文件。选择文件后,结果会返回到我的应用程序的onActivityResult
,我可以获得DriveId
。到现在为止还挺好。为什么DriveFile openContents间歇性地导致失败?
当我尝试打开这个文件时,它有时会起作用,有时不起作用。换句话说,contentsResult.getStatus().isSuccess()
有时是真的,有时是错误的。
getStatus()
没有任何说明它为什么失败并且没有未决解决方案。
看着Android的logcat,我看到这个消息似乎与问题有关。这不是从我的应用程序:
E/FileDownloader﹕ Error downloading: EntrySpec[769]
java.io.IOException: Unexpected response code: 403
at com.google.android.gms.drive.metadata.sync.syncadapter.a.f.a(SourceFile:232)
at com.google.android.gms.drive.metadata.sync.syncadapter.a.f.a(SourceFile:69)
at com.google.android.gms.drive.metadata.sync.syncadapter.a.g.run(SourceFile:344)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:811)
麻烦的是,这是不一致的。有些文件打开,有些则不打开。
这与我打开的文件无关;如果我重新启动应用程序,相同的错误文件将开始工作,其他人将失败。我也进入了API控制台,并将此API的配额增加到100个请求/用户/秒。
我们补充的问题,这里是我尝试打开该文件:
DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, driveId);
file.openContents(mGoogleApiClient,DriveFile.MODE_READ_ONLY,null)
.setResultCallback(new ResultCallback<DriveApi.ContentsResult>() {
@Override
public void onResult(DriveApi.ContentsResult contentsResult) {
if (!contentsResult.getStatus().isSuccess()) {
Log.w(TAG, "Could not open Google Drive file");
if (contentsResult.getStatus().getResolution() != null) {
//There is never a resolution
}
return;
}
}
...
答
从描述,这听起来像你已经命中率限制的错误,同时试图让API调用。尽管您每天可能没有达到配额限制,但您仍然可以达到每秒配额限制。尝试修复Drive API的开发人员控制台中的每秒配额限制,并执行Exponential Backoff算法。这应该照顾你正在经历的403错误,如上面的链接所示。
什么是状态码和消息? – 2014-11-05 01:03:00
很简单:'意外回应代码:403'(上述文章中的第一个错误块)。这不是作为我自己的应用程序日志的一部分出现的,所以除此之外我什么都看不到。 – Mendhak 2014-11-05 11:25:57
对我来说同样的错误... – Arnaud 2014-11-05 19:11:11