将 timeout() 与 retryWhen() 结合起来

2024-07-01

我正在创建一个简单的应用程序,用于使用 RxAndroidBle 库连接蓝牙设备(干杯,大家干得好!)。 我遇到的情况是,有时当我连接到设备时,我会收到状态为 133 的 Gatt 错误。 我知道这可能会发生,所以我想做的就是在发生错误时重试所有操作。 这不是问题,我可以轻松做到这一点retryWhen()运算符,但是我有另一个要求 - 流必须在之后终止 如果连接不成功则需要 30 秒。我用了timeout()为此,但问题是当我重试时,计时器会再次启动。

所以问题是如何将 timeout() 运算符与 retryWhen() 结合起来,以便我可以重试某些特定错误,但保持计数器继续运行。

我有一些关于组合可观察量的想法,或者一些单独的可观察量,它们将在超时后检查连接状态,但我 想知道我是否可以在单个可观察中做到这一点。

到目前为止我的代码如下所示:

public Observable<ConnectingViewState> connectToDevice(String macAddress) {
        final RxBleDevice rxBleDevice = rxBleClient.getBleDevice(macAddress);
        return rxBleDevice.establishConnection(false)
                .subscribeOn(Schedulers.io())
                .map(rxBleConnection -> new ConnectingViewState.ConnectedViewState(rxBleConnection))
                .cast(ConnectingViewState.class)
                .timeout(40, TimeUnit.SECONDS)
                .startWith(new ConnectingViewState.ConnectingInProgressViewState())
                .retryWhen(errors -> errors.flatMap(error -> {
                            if (isDefaultGattError(error)) {
                                return Observable.just(new Object());
                            } else {
                                return Observable.error(error);
                            }
                        }
                ))
                .onErrorReturn(throwable -> new ConnectingViewState.ErrorState(throwable));
    }

The retryWhen运算符通过重新订阅其上方的运算符链来工作。自从您放置了您的timeout在它之前,所述超时被重新订阅,因此再次从头开始计数。

放置timeout after the retryWhen应该对整个可重试流程应用全局超时。

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

将 timeout() 与 retryWhen() 结合起来 的相关文章

  • Firebase 和 Google Play 服务之间要使用哪些依赖项?

    我最近开始使用 Firebase 但我无法完全理解它与 Google Play Services 的关系 我知道Firebase是一个移动平台 在Android上它是基于Google Play Services的 但是为什么有一些模块与Go
  • 如何对文本文件执行二分搜索

    我有一个大文本文件 5Mb 我在 Android 应用程序中使用它 我将文件创建为预先排序的字符串列表 并且文件一旦创建就不会更改 如何对此文件的内容执行二分搜索 而不需要逐行读取来查找匹配的字符串 由于文件的内容不会改变 因此您可以将文件
  • 如何从一个活动组中的活动导航到android中的另一个活动

    我有两个标签 在这两个选项卡中我有不同的活动组 如何从一个活动组中的一个活动导航到android中的另一个活动 请帮我举出合适的例子 就我而言 我确实喜欢这样 当我单击父组最后一个活动中的完成 提交按钮时 我提交了值 将值存储到服务器 数据
  • Android + PhoneGap拦截URL(相当于iOS的shouldStartLoadWithRequest)

    我的 PhoneGap 包装的 本地托管的 Sencha Touch 应用程序会进行一些虚假的 URL 回调来与本机包装器进行通信 IE app callback do function a 在iOS中我实现了以下内容 BOOL webVi
  • 如果没有连接 USB 电缆,ADB over TCP/IP 无法工作

    我可以使用 USB 电缆通过 ADB 连接到我的智能手机 我还可以通过 tcp ip 连接到同一智能手机 adb connect 192 168 1 110 同时 USB 电缆仍处于连接状态 但是 一旦我断开电缆 我就会松开 tcp ip
  • Progruard 和 R8 已弃用 - Android Studio 3.6

    将 Android Studio 升级到 3 6 后 我收到了有关 Proguard 和 R8 的弃用警告 这是否意味着我们不应该在项目中使用混淆 或者在发布模式下构建时我们应该考虑另一个等效选项 选项 android enableR8 已
  • Android:在服务器端验证应用程序的完整性

    我正在编写一个通过 HTTPS 与服务器应用程序进行通信的 Android 应用程序 在服务器端 我必须绝对确定 Android 应用程序的完整性 这意味着服务器应用程序需要确保它与我开发的 Android 应用程序通信 而不是与重写的应用
  • 无法解析“:app@debug/compileClasspath”的依赖关系:无法解析

    新安装的安卓工作室3 1 3在创建新项目并第一次编译时出现奇怪的依赖关系错误 一个相似的question https stackoverflow com questions 46949622 android studio 3 0 unabl
  • Android模拟器相机自定义图像

    有谁知道模拟器相机启动时可以打开一些个人照片吗 我有一个基于图像分析的应用程序 我希望当我单击相机按钮时 相机会打开而不是默认的 Android 模拟器移动图像 我希望它打开一些我设置为默认图像的图像 因此 当我选择拍照时 它只会显示该图像
  • 使用硬件键盘时 Android TabHost 选项卡会窃取焦点

    我目前有一个TabHost包含 4 个选项卡 在一些片段上我们有一些EditText布局内的视图 我们注意到 当您尝试输入任何内容时EditText使用硬件键盘的视图 焦点被窃取EditText并赋予当前活动选项卡TabHost 这只发生在
  • 关于ListView中ViewHolder模式实现优化

    因此 众所周知的 ViewHolder 模式通常看起来像 ListAdapter Override public View getView final int position View convertView final ViewGrou
  • 是否可以从 Linux CLI 编译适用于 Android 的 Xamarin?

    我们有一个 Android 应用程序 它根据每个客户端使用自定义信息进行编译 目前 我们的应用程序是使用 Ionic 构建的 因此当用户要求下载 APK 时 我们会自动相应地修改其源代码 编译应用程序并提供从客户端的下载 所有这一切都是在
  • 更改 Android 中的配对对话框外观

    我们有一个与 BLE 设备 我们也生产 配对的 Android 应用程序 但默认的 Android 配对对话框存在一些问题 问题是 我们的设备不需要访问联系人或通话记录 是否可以删除该选项 无论是否选中该框 配对和我们的功能都将起作用 但我
  • android 图像被文本包裹

    我想将图像插入文本中 例如 我想显示这样的文本 要编辑图片 您应该单击 图片 按钮 其中 image 是真实图像 例如 ImageView 你可以试试这个 不知道这是否是你的需要 setContentView R layout main T
  • 三星我的文件资源管理器:从指定文件夹中选取文件

    我使用以下代码打开三星的 我的文件 应用程序来选择文件 public void openFileBrowser Intent intent new Intent com sec android app myfiles PICK DATA t
  • Android背景音乐服务

    我正在 Android 中开发一个娱乐应用程序 我想播放背景音乐 并且我想为此使用服务 应用程序有 3 个活动 所有活动都必须播放音乐 此外 当活动暂停时 音乐必须暂停并在被破坏时停止 谁能告诉我该怎么做 有链接或例子吗 谢谢 无需服务即可
  • 如何在Android中启用接近传感器

    我已在代码中成功配置了距离计 现在我想以编程方式关闭和打开屏幕 传感器代码工作正常 并且也调用了以下方法 Override public void onSensorChanged SensorEvent event TODO Auto ge
  • 处理 Android 自定义内容提供程序中的(跨进程)异常

    我的 Android 应用程序中有一个自定义内容提供程序 运行得相当不错 我希望其他应用程序也可以访问我的内容提供商 我想要一些干净的方法来传达异常和错误 但据我所知 Android 内容提供程序框架没有提供任何跨进程传播异常的方法 我应该
  • Android - 循环 strings.xml 文件

    我想知道是否有办法循环strings xml file 假设我有以下格式
  • 在这种情况下是否违反了 Google Play 开发者政策? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想通过 Android 应用程序赚一些钱 但我面临一个大问题 Google 在 Google Play 上不支持我所在的国家 地区 适用

随机推荐