HTTP 失败:java.net.SocketException:套接字已关闭;不启动异常处理方法

2024-04-01

我有一个 RxJava 链请求,应该释放一些 onError() 或 onComplete() 锁,所以,基本上,我的问题是:当我为 OkHttpClient 设置读取、连接和写入超时时,我没有得到所需的行为。我正在使用 Retrofit2 和 OkHttp3.6.0 这是我的简化客户端:

OkHttpClient.Builder builder = new OkHttpClient.Builder()
           .readTimeout(30, TimeUnit.SECONDS)
           .connectTimeout(30, TimeUnit.SECONDS)
           .writeTimeout(30, TimeUnit.SECONDS)
OkHttpClient okHttpClient = builder.build();

这是我的链请求的简化版本:

public <T extends Response> Observable<T> doSomething(Observable<T> base) {
    isLocked = true;
    return someApiCall()
               .flatMap(apiResponse -> handleResponse(apiResponse, base)
                   .doOnError(throwable -> {
                       isLocked = false;
                   })
                   .doOnCompleted(() -> {
                       isLocked = false;
                   }));
}

handleResponse()进行另一个 API 调用并返回Observable<Response<Something>>但是,正如我所说,它有时会失败HTTP FAILED: java.net.SocketException: Socket closed并且它永远不会完成 Observable,因此永远不会调用 onError() 或 onComplete()。我也尝试过 onTerminate() ,但没有运气。当我从OkHttlClient, the SocketException实际上被抛出并被抓住,释放了isLocked多变的。我试过包裹handleResponse()return 语句带有try {} catch (Exception e) {}阻止,但即使这样也没有抓住SocketException当设置自定义超时时。有任何想法吗?


我在 Android 中使用构建器设置的选项 retryOnConnectionFailure(true) 解决了这种情况。

鉴于 Retrofit 2 仅接收 OkHttpClient 对象。

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

HTTP 失败:java.net.SocketException:套接字已关闭;不启动异常处理方法 的相关文章

  • 使用合并适配器;寻找一种方法来确定 ListActivity onListItemClicked 方法中列表项的数据类型

    我使用 MergeAdapter 创建一个分段列表 其中列表的每个部分都包含不同类型的基础数据 一切都按预期进行 然而 在确定所选列表项背后的数据类型时 ListActivity 的 onListItemClicked 方法似乎比应有的更复
  • SpinnerAdapter 中 getView 和 getDropDownView 的区别

    当你实现 SpinnerAdapter 时 你会得到获取下拉视图 http developer android com reference android widget SpinnerAdapter html getDropDownView
  • 如何在 PercentRelativeLayout 中使用layout_aspectRatio?

    我尝试在视图上实现 16 9 的纵横比PercentRelativeLayout https developer android com reference android support percent PercentRelativeLa
  • Android 堆栈大小

    我如何获取和更改 Android 应用程序的堆栈大小 即使是主线程 主线程堆栈大小是在固件中设置的 无法修改 除非修改您自己手机的固件 正如斯特朗先生指出的那样 对于您分叉的线程 您可以设置自己的堆栈大小
  • 如何在android中使用Mediaprojection库捕获屏幕并转换为mp4文件?

    从 android 5 0 开始 他们提供了媒体投影库来捕获屏幕内容 但他们提供的示例演示应用程序尚不清楚 你可以找到示例应用程序here https github com googlesamples android ScreenCaptu
  • Android 4.3 虚拟设备 CPU/ABI - 未安装系统映像(eclipse)

    I m trying to set up a new device but I can not continue with the process I think it s because the target version is 4 3
  • 我无法从 Android 模拟器中删除日语 IME

    我已经多次看到这个问题 但答案总是 从 语言和键盘设置 菜单中取消选中 IME 问题是那里没有复选框 选择菜单 自定义区域设置 en US 菜单 设置 语言和键盘 选择语言 选择 英语 美国 菜单 设置 语言和键盘 日语输入法是唯一的输入法
  • Android:如何根据视图模型实时数据属性为片段编写单元测试?

    我的片段 UI 中有一个列表视图 其元素集取决于来自视图模型 LiveData 属性的值的状态 我想为片段创建工具测试 该片段包含与该属性的值集相关的 3 个场景测试用例 但我不知道从哪里开始 我的代码应该如下所示 class MyView
  • Android - 在通知栏中使用外部个人资料图像,如 Facebook

    我知道您可以在推送通知参数中发送信息 例如消息 标题 图像 URL 等 Facebook 如何在通知区域中显示您的个人资料图片和消息 我想在通知区域中使用外部图像 因此当您将其下拉时 您会看到带有消息的个人资料图像 现在 我的仅显示可绘制文
  • 在 Android 中完成一项活动?

    我有一些活动 Home Activity gt Activity 1 gt Activity 2 gt Activity 3 gt HomeActivity finish finish finish Home Activity gt Act
  • 在 Android Studio 中使用预构建的共享库

    我需要在我的 android 项目中使用自定义的预构建共享库 在独立 ndk 上构建为 libdynamic so 我在路径 src main 中创建了一个文件夹 jniLibs 然后在其中创建了 4 个文件夹 即 armeabi arme
  • 通过拖动块来选择多个项目

    首先 让我告诉你 我对此感到压力很大 因为我什至不知道概念 方法名称 所以我什至无法在谷歌中搜索它 因为我不知道关键字 但我会尝试我的最好解释一下 请随意修改我的内容和标题 我想要实现的是 我的视图组包含许多子视图 或者它可以是 GridV
  • 带有可点击区域的 Android 图像

    我需要建议如何在 Android 下实现以下功能 我需要一个表示类似于图形 来自离散数学 的图像 具有顶点和边缘 我可以在其中单击每个顶点或边缘并触发不同的操作 请告诉我如何实现这一目标 也许与imagebuttons 或另一种表示此功能的
  • Kotlin 中的枚举类对于 Android 来说是否像 Java 中那样“昂贵”?

    Are EnumKotlin 中的类对于 Android 来说 昂贵 就像 Java 一样 还可以用吗 IntDefs or StringDefs在科特林 当我将 Kotlin Enum 类反编译为 Java 类时 底层仍然使用了 Java
  • SWIG C 函数指针和 JAVA

    我有一些 C 代码 其中一个方法有一个函数指针作为参数 我正在尝试在我的 Android 应用程序中使用 C 代码 我决定使用 SWIG 来完成生成我需要的 java 文件的所有工作 一切都适用于常规函数 没有函数指针作为参数的函数 但我不
  • Android Wear Overlay 传递触摸事件

    我有一个 Android Wear 应用程序 其中我使用透明的覆盖视图来接收触摸事件 我需要能够接收屏幕上任何位置发生的所有触摸事件 并且还能够看到它们的坐标 我发现的所有研究都表明我无法接收所有触摸事件并将其传递 然而 and 都在做这样
  • 如何使用Android Invalidate()

    在我的主要活动中 我定义了两个视图和一个菜单 浏览次数 1 自定义视图游戏 2 按钮btn 菜单 1 打开项目用于打开文件 菜单布局在不同的活动中定义 基本上 当主活动启动时 它会绘制没有任何内容的自定义视图和按钮 然后我使用菜单中的 打开
  • Android studio 问题:找不到广告:AdQuality:未指定

    我已经更新了 Android studio 刚刚打开我的项目 我收到以下错误 您能让我知道如何解决这个问题吗 Error A problem occurred configuring project memoryGameCollection
  • 膨胀类 android.support.design.internal.BottomNavigationView 时出错

    我正在制作我的第一个应用程序 这是一个简单的应用程序 带有启动屏幕和主要活动 现在我有两个构建变体 免费版本 活动底部有 Admob 横幅 付费版本 该应用程序不会在底部显示 admob 横幅 而是将其替换为用于切换活动的底部导航视图 我将
  • 如何在给定的纬度和经度处使用标记/覆盖项目启动地图意图?

    我有一个纬度和经度 我想打开以该点为中心的谷歌地图 所以我使用以下代码 Intent intent new Intent android content Intent ACTION VIEW Uri parse geo lat lng st

随机推荐