请求所有文件时如何避免读取超时? (谷歌驱动器API)

2023-12-10

我有一个驱动器应用程序,它请求所有未删除的文件。但有时会抛出读取超时的IO异常。有办法避免这种情况吗?

这是我得到的错误:

发生错误:java.net.SocketTimeoutException:读取超时

也许我的指数退避实施错误。

这是我用来获取文件的代码:

private static List<File> retrieveAllNoTrashFiles(Drive service) throws IOException, InterruptedException {
    List<File> result = new ArrayList<File>();
    Files.List request = service.files().list().setQ("trashed = false").setMaxResults(1000);
    do {
        try {
            FileList files =executeRequest(service,request);
            result.addAll(files.getItems());
            request.setPageToken(files.getNextPageToken());
        } catch (IOException e) {       //here I sometimes get the read timeout
            System.out.println("An error occurred: " + e);
            request.setPageToken(null);
        }
    } while (request.getPageToken() != null
            && request.getPageToken().length() > 0);

    return result;
}

private static FileList executeRequest(Drive service,Files.List request) throws IOException, InterruptedException {
    Random randomGenerator = new Random();
    for (int n = 0; n < 5; ++n) {
        try {
            return(request.execute());
        } catch (GoogleJsonResponseException e) {
            if (e.getDetails().getCode() == 403
                    && (e.getDetails().getErrors().get(0).getReason().equals("rateLimitExceeded")
                    || e.getDetails().getErrors().get(0).getReason().equals("userRateLimitExceeded"))) {
                // Apply exponential backoff.
                Thread.sleep((1 << n) * 1000 + randomGenerator.nextInt(1001));
            } 
             //else {
                // Other error, re-throw.
               // throw e;
           // }
        }
    }catch(SocketTimeoutException e){
            Thread.sleep((1 << n) * 1000 + randomGenerator.nextInt(1001));
        }
    System.err.println("There has been an error, the request never succeeded.");
    return null;
}

几天前我也有同样的经历。我的问题的答案在这里找到了。https://code.google.com/p/google-api-java-client/wiki/FAQ。创建 Drive 实例时,您可以调用 setHttpRequestInitializer 方法,将 HttpRequestInitializer 的新实例作为参数传递,并实现初始化方法。在那里,您可以增加 ReadTimeout 和 ConnectionTimeout。

这是示例代码:

         Drive drive = new Drive.Builder(this.httpTransport, this.jsonFactory, this.credential).setHttpRequestInitializer(new HttpRequestInitializer() {

            @Override
            public void initialize(HttpRequest httpRequest) throws IOException {

                credential.initialize(httpRequest);
                httpRequest.setConnectTimeout(300 * 60000);  // 300 minutes connect timeout
                httpRequest.setReadTimeout(300 * 60000);  // 300 minutes read timeout

            }
        }).setApplicationName("My Application").build();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

请求所有文件时如何避免读取超时? (谷歌驱动器API) 的相关文章

随机推荐

  • 如何手动将 twitter bootstrap 包含在我的 Rails 项目中(不使用任何 gem)?

    我正在学习 Rails 并且想使用 Rails 和 Twitter Bootstrap 我的 Rails 项目布局是 assets images javascripts stylesheets controllers helpers mai
  • iOS UITableView 中的多列

    我有多行和多列数据 但 iPhone UITableView 仅包含单列和多行 如何按照 Apple 的人机界面指南显示多列数据 您可能需要自己构建它 或者使用库 例如UI网格视图 我是创造者 你可以学习一下源码UI网格视图 真的很短
  • 无法使用 Laravel 连接到本地 MySQL 服务器

    当我运行这个命令时find name my cnf我找到了两个位置my cnf opt lampp etc my cnf etc mysql my cnf 我不明白MySQL服务器使用的是哪一个 而且 当我运行命令时php artisan
  • 模拟器还是仿真器?有什么不同?

    虽然我了解模拟和仿真的一般含义 但我几乎总是对它们感到困惑 假设我创建了一个模仿现有硬件 软件的软件 我应该称呼它什么 模拟器还是仿真器 谁能解释一下编程方面的区别吗 额外提示 这两个术语在英语中有什么区别 抱歉 我不是母语人士 仿真是模仿
  • 按钮在主活动中不可见

    我在主要活动中创建了三个按钮 我对按钮一使用了以下代码 btn setOnClickListener new View OnClickListener Override public void onClick View v btn setV
  • matlab条件矩阵赋值

    我有一个关于矩阵分配的问题 假设我有三个矩阵A B和C 我想根据规则将矩阵C的元素分配给A和B的元素 C i j A i j if abs C i j A i j lt abs C i j B i j C i j B i j if abs
  • Mysql:“select from”的结果顺序与“select * from”的结果顺序不同

    我有一个 mysql 数据库 其中有一个表 困难 其中有一些记录 如果我 从困难中选择 我会按照添加的顺序返回它们 并按主键 ID 排序 mysql gt select from difficulties id value name let
  • 如何让这个 jQuery 动画代码永远循环?

    我正在尝试在滑块上创建文本动画循环 我尝试循环但它不起作用 你能告诉我如何永远循环这个脚本吗 谢谢
  • RouteCollection”不包含“MapMvcAttributeRoutes”的定义

    我只需要降级我的ASP NET 4 5 2申请到ASP NET 4 0 当然 这会带来问题 比如引用安装不正确 我已经解决了其中一些问题 但我无法解决错误 CS106 RouteCollection 不包含定义 MapMvcAttribut
  • 美丽汤 find() 返回 None?

    我正在尝试解析 HTMLwebsite 我想从所有这些中获取文本span元素与class post subject 例子 span class post subject Set of 20 moving boxes 20009 or 200
  • 菜单背景改变滚动颜色

    我想做的是 当用户到达网站的下一部分时 将菜单的背景从透明淡入浅灰色 我到处搜索脚本 并在这里尝试了多个脚本 但似乎根本不起作用 任何帮助将不胜感激 Thanks HTML
  • std:: 引用对

    拥有一个有效吗std pair参考文献 特别是 赋值运算符是否存在问题 根据这个链接 好像没有对operator 进行特殊处理 所以默认的赋值运算符将无法生成 我想要一个pair
  • 指数曲线拟合matlab

    我有以下等式 我想使用 MATLAB 对上述方程进行指数曲线拟合 其中y f u a y是我的输出 u a 是我的输入 我想求系数A B对于一组提供的数据 我知道如何通过定义状态来对简单多项式执行此操作 举个例子 如果states ones
  • 如何保存tf.data.Dataset对象?

    如上 我尝试对其进行酸洗 但出现以下错误 Maybe arr self cpu nograd numpy pylint 禁用 受保护的访问 运行时错误 Tensorflow 类型 21 无法转换为 numpy dtype tf data D
  • 在 Fortran 中调用子例程(分段错误)

    以下代码在 Linux 系统上使用 pgf90 编译时出现分段错误 而在 Windows 上使用 Intel Visual FORTRAN 时运行成功 program main implicit none integer a 3 b 3 c
  • 如何计算文档中单词与特定术语的接近度

    我正在尝试找出一种方法来计算文档中特定术语的单词接近度以及平均接近度 按单词 我知道 SO 上也有类似的问题 但没有任何东西可以给我我需要的答案 甚至没有给我指出一些有用的地方 假设我有以下文本 song lt Far over the m
  • 检测精灵之间碰撞的最佳方法?

    检测 2D 游戏精灵中的碰撞的最佳方法是什么 我目前从事 allegro 和 G 工作 有多种方法可以检测碰撞检测 根据您使用的是 2d 还是 3d 环境 您使用的方法将略有不同 还要记住 在建立碰撞检测系统时 要考虑到您可能想要在游戏中实
  • 将外部配件连接到 3.5 毫米耳机插孔时无法收到通知

    我已经尝试让它发挥作用有一段时间了 我已经完成了文档中所说的所有操作 但仍然一无所获 这是我的应用程序委托中注册本地通知的代码 void registerForLocalNotifications NSNotificationCenter
  • sqrt() 函数链接错误

    以下代码在 Linux 上引发未定义符号错误 cat rms c sqrt example include
  • 请求所有文件时如何避免读取超时? (谷歌驱动器API)

    我有一个驱动器应用程序 它请求所有未删除的文件 但有时会抛出读取超时的IO异常 有办法避免这种情况吗 这是我得到的错误 发生错误 java net SocketTimeoutException 读取超时 也许我的指数退避实施错误 这是我用来