为什么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; 
         } 
       } 
       ... 
+0

什么是状态码和消息? – 2014-11-05 01:03:00

+0

很简单:'意外回应代码:403'(上述文章中的第一个错误块)。这不是作为我自己的应用程序日志的一部分出现的,所以除此之外我什么都看不到。 – Mendhak 2014-11-05 11:25:57

+0

对我来说同样的错误... – Arnaud 2014-11-05 19:11:11

从描述,这听起来像你已经命中率限制的错误,同时试图让API调用。尽管您每天可能没有达到配额限制,但您仍然可以达到每秒配额限制。尝试修复Drive API的开发人员控制台中的每秒配额限制,并执行Exponential Backoff算法。这应该照顾你正在经历的403错误,如上面的链接所示。