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方法)隔离并演示问题。快速启动程序(经过修改)准确地反映了我遇到的问题,并(我希望)随之发生