我的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;
}
}
...
答案 0 :(得分:0)
根据说明,这听起来像您在尝试进行API调用时遇到了速率限制错误。虽然您可能无法达到每天的配额限制,但仍然可以达到每秒限额限制。尝试从Drive API的开发者控制台修复每秒限额限制,并实施Exponential Backoff算法。这应该处理您遇到的403错误,如上面的链接所示。