2014-11-03 74 views
1

我的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

回答

0

從描述,這聽起來像你已經命中率限制的錯誤,同時試圖讓API調用。儘管您每天可能沒有達到配額限制,但您仍然可以達到每秒配額限制。嘗試修復Drive API的開發人員控制檯中的每秒配額限制,並執行Exponential Backoff算法。這應該照顧你正在經歷的403錯誤,如上面的鏈接所示。