为什么DriveFile openContents会间歇性地导致失败?

时间:2014-11-03 20:37:02

标签: android google-drive-api google-drive-android-api

我的Android应用程序可以通过Google云端硬盘来选择文件。选择文件后,结果将返回给我的应用程序onActivityResult,我可以获得DriveId。到目前为止一切都很好。

当我尝试打开此文件时,它有时会起作用,有时甚至不起作用。换句话说,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;
                        }
                 }
                 ...

1 个答案:

答案 0 :(得分:0)

根据说明,这听起来像您在尝试进行API调用时遇到了速率限制错误。虽然您可能无法达到每天的配额限制,但仍然可以达到每秒限额限制。尝试从Drive API的开发者控制台修复每秒限额限制,并实施Exponential Backoff算法。这应该处理您遇到的403错误,如上面的链接所示。