Google drive api 使用驱动器REST API的文件().list()出现内部服务器错误500
更新:此问题似乎已解决。有关详细信息,请参阅Google drive api 使用驱动器REST API的文件().list()出现内部服务器错误500,google-drive-api,Google Drive Api,更新:此问题似乎已解决。有关详细信息,请参阅 我在通过驱动器RESTAPI(v3)获取文件列表请求时遇到了一些困难,而无需 内部服务器错误(错误代码500)。我正在尝试使用name和appProperties键调用 搜索条件中的files().list(),排序顺序为name和createdTime。(这是中的“案例1”) 下面的代码。)我使用的语法是有文档记录的 为了解决这个问题,我采用了googledriveapi>restaidroid快速启动项目 发现并对 如下面的代码块所示的getD
我在通过驱动器RESTAPI(v3)获取文件列表请求时遇到了一些困难,而无需 内部服务器错误(错误代码500)。我正在尝试使用
name
和appProperties
键调用
搜索条件中的files().list()
,排序顺序为name
和createdTime
。(这是中的“案例1”)
下面的代码。)我使用的语法是有文档记录的
为了解决这个问题,我采用了googledriveapi>restaidroid快速启动项目
发现并对
如下面的代码块所示的getDataFromApi
方法
有六个测试用例使用搜索条件和排序顺序字段的各种组合。有些查询在执行时成功
其他服务器失败,服务器代码为500,一次超时。这些结果在运行Android 7.0的模拟器上是一致的
使用API 24。我的问题源于早期版本
我最感兴趣的是获得案例1的解决方案,并提供其他案例,作为我试图找出问题所在的尝试。我将感谢任何关于我可能做错什么或可能发生什么的帮助或想法
private List<String> getDataFromApi() throws IOException {
// Get a list of up to 10 files.
List<String> fileInfo = new ArrayList<String>();
/* Case 1: Crashes with following error:
500 Internal Server Error
{
"code" : 500,
"errors" : [ {
"domain" : "global",
"message" : "Internal Error",
"reason" : "internalError"
}],
"message" : "Internal Error"
} */
String query = "name contains 'Test' and not appProperties has {key='X' and value='Y'}";
String orderBy = "name, createdTime";
// Case 2: Succeeds and lists files.
// Like case 1, but "createdTime is dropped in sort order.
// String query = "name contains 'Test' and not appProperties has {key='X' and value='Y'}";
// String orderBy = "name";
// Case 3: Succeeds and lists files.
// Like case 1, but appProperties criteria is dropped.
// String query = "name contains 'Test'";
// String orderBy = "name, createdTime";
// Case 4: Times out.
// Like case 1, but the name criteria is dropped.
// String query = "not appProperties has {key='X' and value='Y'}";
// String orderBy = "name, createdTime";
// Case 5: Errors out like case 1.
// Like case 4, but the selection query is inverted.
// String query = "appProperties has {key='X' and value='Y'}";
// String orderBy = "name, createdTime";
// Case 6: Succeeds and lists files.
// Like case 4, but name is dropped in sort order.
// final String query = "not appProperties has {key='X' and value='Y'}";
// final String orderBy = "createdTime";
FileList result = mService.files().list()
.setPageSize(10)
.setFields("nextPageToken, files(id, name)")
// following was added
.setOrderBy(orderBy)
.setQ(query)
// end added code
.execute();
List<File> files = result.getFiles();
if (files != null) {
for (File file : files) {
fileInfo.add(String.format("%s (%s)\n",
file.getName(), file.getId()));
}
}
return fileInfo;
}
private List getDataFromApi()引发IOException{
//获取最多10个文件的列表。
List fileInfo=new ArrayList();
/*案例1:发生以下错误的崩溃:
500内部服务器错误
{
“代码”:500,
“错误”:[{
“域”:“全局”,
“消息”:“内部错误”,
“原因”:“内部错误”
}],
“消息”:“内部错误”
} */
String query=“name包含'Test'而不是appProperties具有{key='X'和value='Y'}”;
String orderBy=“name,createdTime”;
//案例2:成功并列出文件。
//与案例1类似,但“createdTime”按排序顺序删除。
//String query=“name包含'Test'而不是appProperties具有{key='X'和value='Y'}”;
//字符串orderBy=“name”;
//案例3:成功并列出文件。
//与案例1类似,但appProperties条件被删除。
//String query=“名称包含“测试”;
//String orderBy=“name,createdTime”;
//案例4:超时。
//与案例1类似,但名称标准被删除。
//String query=“not appProperties具有{key='X'和value='Y'}”;
//String orderBy=“name,createdTime”;
//案例5:出现与案例1类似的错误。
//与案例4类似,但选择查询是反向的。
//String query=“appProperties具有{key='X'和value='Y'}”;
//String orderBy=“name,createdTime”;
//案例6:成功并列出文件。
//与案例4类似,但名称按排序顺序删除。
//final String query=“not appProperties具有{key='X'和value='Y'}”;
//最终字符串orderBy=“createdTime”;
FileList结果=mService.files().list()
.setPageSize(10)
.setFields(“nextPageToken,文件(id,名称)”)
//增加了以下内容:
.setOrderBy(orderBy)
.setQ(查询)
//结束添加代码
.execute();
List files=result.getFiles();
如果(文件!=null){
用于(文件:文件){
fileInfo.add(String.format(“%s(%s)\n”,
file.getName(),file.getId());
}
}
返回文件信息;
}
答案的主要编辑:
我想你应该向谷歌报告这是一个bug。我一直在玩它,我无法让appProperties
作为its的一部分返回,就像文件资源不包含该字段一样,因此你从中得到一个错误。即使我将字段设置为*时也是如此,它应该返回文件的所有字段
当您报告时,请向他们发送您的示例并链接此问题。将您的问题请求链接回此处,我将查看是否可以在Google Drive上找到人对此进行ping。指数回退仅在错误是暂时的情况下适用。这种情况仅偶尔发生,例如,当数据中心停机时 GDrive中有500多个错误是错误,其中一个无效的
(有效)请求处理不正确。我建议您使用以确保查询字符串的格式正确、引用正确等。感谢您的详细回复。我知道指数退避的概念,但我不相信它解决了我的问题。我的测试用例总是失败,而且永远不会成功。如果问题是暂时的,我希望至少会偶尔成功。我使用的QuickStart应用程序向执行文件()的用户提供一个按钮按需请求。如果我按下该按钮一次、两次或十次,延迟会有所不同,结果总是一样的,永远不会改变。这让我相信,问题不是指数退避可以解决的短暂问题。如果你得到500个错误,如果你再试一次,它是否有效。你只需要实现指数退避。您尚未显示代码,因此很难帮助您调试该问题。如果我遇到500错误,如果我重试(或一次又一次),它将不起作用。测试用例每次都以我记录的方式失败。至于发布代码,我使用的是QuickStart程序(只有mods-to-getDataFromApi方法)隔离并演示问题。快速启动程序(经过修改)准确地反映了我遇到的问题,并(我希望)随之发生