使用 Retrofit observable 处理网络错误

2024-03-18

当将 Observables 与 Retrofit 结合使用时,如何处理网络故障?

鉴于此代码:

Observable<GetJobResponse> observable = api.getApiService().getMyData();
observable
    .doOnNext(new Action1<GetJobResponse>() {
        @Override
        public void call(GetJobResponse getJobResponse) {
            //do stuff with my data
        }
    })
    .doOnError(new Action1<Throwable>() {
        @Override
        public void call(Throwable throwable) {
            //do stuff with error message
        }
    });

如果没有网络,请求就会失败,并且 onError 不会被调用。它不会崩溃,而是默默地失败。日志显示 Retrofit 出现错误:

 java.net.UnknownHostException: Unable to resolve host "api-staging.sittercity.com": No address associated with hostname
     at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
     at java.net.InetAddress.getAllByName(InetAddress.java:214)
     at com.squareup.okhttp.internal.Dns$1.getAllByName(Dns.java:29)

使用回调,这可以简单地传递给 onFailure(RetrofitError error)。我怎样才能用 RxJava 来实现这一点?


我的问题实际上是在我的代码的其他地方。使用 rxJava + Retrofit 处理网络错误非常简单,因为它只是在 onError 方法中抛出一个 RetrofitError :

 @Override
 public void onError(Throwable e) {
     if (e instanceof RetrofitError) {
        if (((RetrofitError) e).isNetworkError()) {
            //handle network error
        } else {
            //handle error message from server
        }
     }
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Retrofit observable 处理网络错误 的相关文章

  • 从状态栏中删除通知图标

    我在状态栏中显示一个图标 现在我想在打开该内容时立即删除该图标 一段时间后如果我们收到任何警报 该图标将再次显示 我怎样才能做到这一点 使用NotificationManager取消您的通知 您只需提供您的通知 ID https devel
  • 使用线程或异步任务的位图工厂动画

    这个问题是我在这个论坛上提出的多个问题的后续问题 这些问题涉及为什么我一直在尝试的动画不起作用 简单回答一下之前的问题 我的动画作为 2 个班级的单独项目工作 但无法工作 当包含在我的包含多个类的项目中时 使用 finish 类关闭了导致我
  • 注意:android.support.v4.text.ICUCompatIcs:找不到动态引用的类 libcore.icu.ICU

    我今天开始收到最新 Android Build Tools ABT v19 0 3 的消息 乍一看 我认为这可能是 ABT 的问题 然而 仔细调查后发现 这条消息 android support v4 text ICUCompatIcs c
  • 使用 Android SDK 随机访问文件 > 2GB

    谁能告诉我如何使用 android SDK 随机访问超过 2GB 的文件 我试图寻找 gt 2147483647 的位置并得到异常 值对于定义的数据类型来说太大 这很奇怪 因为查找命令的参数是 long 类型 详细内容请参见代码示例 Ran
  • Titanium 创建图像文件:file.write(blob) 未创建正确的文件

    我正在尝试使用 Titanium 1 8 1 读取 PNG 文件 这是我读取文件的代码 var f Ti Filesystem getFile Ti Filesystem resourcesDirectory KS nav views pn
  • 获取 gradle 构建的 aapt2 参数?

    我有兴趣尝试使用 aapt2 从命令行编译 Android 应用程序 当我尝试执行以下操作时 链接约束布局库时遇到问题aapt2 link命令 该程序从 Android studio gradle 成功构建 如何使 gradle 命令行调用
  • Android Volley StringRequest 有时不工作

    我使用下面的代码从 API 获取一些本地视频 URL public void getVideoAds String serverURL String url http serverURL video StringRequest string
  • support-library-v7 上的 ClassCastException,使用版本 21

    背景 在过去的两周里 我一直将我的应用程序从 ActionBarSherlock 转移到 Google 的官方支持库 以获得 Material Design 风格 我已经更新到最新版本 21 并且包含了 v4 和 v7 My app htt
  • ActionBar 上的自定义主页按钮

    我正在使用 ActionBar Sherlock 库 所以 要更改默认的主页按钮 我这样做了 这不起作用 所以 我也添加了这个
  • 如何保留操作/标题栏但隐藏通知栏

    如何保留操作 标题栏但隐藏通知栏 这个问题看起来已经得到了回答 但我发现的大多数答案都隐藏了操作栏和通知栏 我希望能够保留操作 标题栏 我得到的最好的方法是隐藏两者并使用线性布局来显示自定义操作 标题栏 但我想要一个系统生成的 另外 是否可
  • 生产中的 FirebaseRemoteConfigClientException (Android)

    到目前为止我做了什么 我在用Tasks await blocking https developers google com android guides tasks blocking工作线程中的 firebase 调用机制以避免回调 我正
  • 如何使用ijkplayer库

    我要使用 ijkplayergithub链接 https github com bbcallen ijkplayer 我下载了这个 然后通过 文件 gt 导入 gt 常规 gt 现有项目到工作区 将其导入到 eclipse 中 之后我有三个
  • 小米Exif方向标签错误

    我在用着ExifInterface对于通过检测方向标签从图库中选取的旋转图像 它正在工作 最近我在小米9 SE上测试了应用程序 发现相机拍摄的照片有方向标签8 旋转270 但照片方向是正确的 不需要旋转 为什么方向标签错误 如何找到正确的旋
  • 使用正则表达式解析HLS m3u8文件

    我想解析 HLS master m3u8 文件并从中获取带宽 分辨率和文件名 目前我正在使用字符串解析来搜索字符串中的某些模式并执行子字符串来获取值 示例文件 EXTM3U EXT X STREAM INF PROGRAM ID 1 BAN
  • Android < 4.3 WebView https 错误:回退到 SSLv3,因为主机不容忍 TLS

    我的应用程序包含一个WebView加载 httpsurl 我注意到 Android 版本 gt 4 3一切正常 但在较低版本上我收到此错误 external chromium net http http stream factory imp
  • 在自定义 BaseAdapter 子类中使用 Butter Knife 会导致“无法注入视图”错误

    我正在尝试使用 Butter Knife 来简化自定义 BaseAdapter 类的创建 我正在遵循这里的示例 http jakewharton github io butterknife http jakewharton github i
  • 通过检测 1.6 目标应用程序是否是 2.1 设备来显示动态壁纸?

    我们正在使用目标 SDK 1 6 构建 Android 应用程序 因此它将在 1 6 及更高版本的设备上运行 我们希望支持动态壁纸 我们知道动态壁纸仅限 2 1 有没有一种方法可以构建一个以 1 6 SDK 作为目标的应用程序 但检测它运行
  • 为什么我的 QGestureRecognizer 收不到触摸事件?

    上下文 我正在尝试创建一个类似推子的小部件 它可以在同一视图中具有多个实例 每个实例都可以由不同的手指同时控制 我想用Qt的手势识别系统 http qt project org doc qt 4 8 gestures overview ht
  • Android 每个 Activity 中的通用进度条

    我已经修改了解决方案 我可以获得进度条 但进度条永远不会隐藏 这是创建具有相对布局的进度条的类 public class ProgressBarHandler private ProgressBar mProgressBar private
  • public open fun navigateUp() 的参数太多

    我在 Kotlin 中创建了一个新的 Android 项目 我还使用向导创建了一个新的导航抽屉活动 一如既往 没有任何东西是开箱即用的 以下行显示编译错误 val navController findNavController R id n

随机推荐

  • include_directories 用于导入库

    我正在用 c 编写项目 并且在 cmake 中导入库时遇到问题 正在导入的第三方库不会传播包含目录 根目录 CMakeLists txt Top level CMakeLists txt cmake minimum required VER
  • OpenMp 根据变量设置并行循环的线程数

    有没有办法根据变量的值设置 OpenMP 并行区域的线程数 最初 整个应用程序的线程数 nofCores 在我的 AMD FX 8350 上 nofCores 8 对于这个区域 如果变量是 3 那么我只需要 3 个线程 如果变量 gt 核心
  • Twitter“无法验证您的身份”错误

    我正在使用 Rails 应用程序的 twitter gem 这样我就可以将我的博客文章自动更新到我的 twitter feed 上 我跟着gem 自述文件说明 https github com sferik twitter 将其放入 con
  • 有什么方法可以从内部函数中退出外部函数吗?

    在 PHP 中 如果我有一个函数调用另一个函数 有没有办法让被调用函数退出调用者函数而不杀死整个脚本 例如 假设我有一些类似的代码 p This is some text After this text I m going to call
  • 如何在seaborn catplot中旋转xticklabel

    我无法在 Seaborn Matplotlib 中旋转我的 xlabel 我尝试了很多不同的解决方案 但无法修复它 我在 stackoverflow 上看到了很多相关问题 但它们对我不起作用 我当前的绘图如下所示 但我希望 xlabel 旋
  • Django 检查查询集模型类型的最佳方法

    我有一个 Django 操作函数 我想在基于不同模型的查询集上使用它 检查我的查询集组成的模型类型的最佳方法是什么 假设我想检查 models py 中定义的 Library 类 目前我可以使用它来工作 for object in quer
  • 使用 CreateEvent 创建/打开已存在的事件是否会重置信号?

    如果我使用 CreateEvent 打开一个事件 responseWaitEvent CreateEvent NULL no security TRUE manual reset event FALSE not signaled LPTST
  • 将成员添加到 MailChimp 列表时出现 400 错误请求

    我正在发送一个POST请求以下资源 http developer mailchimp com documentation mailchimp reference lists members 并得到 400 我明白错误意味着什么 http d
  • 如何在标题中仅保留唯一值并在不同行中获取与这些值相对应的值?

    我有一个链接 在该链接中我有一些产品 每个产品中都有一个规格表 该表的第一列应为标题 第二列应为与其对应的数据 每个表的第一列都不同 有一些重叠的类别 我想要一张大表 其中包含所有这些类别 并且按行排列不同的产品 我能够获取一张表 一种产品
  • Android 使用 AccountManager 添加帐户

    大家好 我正在尝试使用 androids accountManager 添加帐户 我不断收到下面的堆栈跟踪 伙计们 我无法发布我的所有代码 因为我打破了 Stack Overflow 允许我输入的限制 因此 我只会发布您请求的代码片段 因为
  • 通过 ASP.NET Web API 有效使用 async/await

    我正在尝试利用async await我的 Web API 项目中的 ASP NET 功能 我不太确定它是否会对我的 Web API 服务的性能产生任何影响 请在下面找到我的应用程序的工作流程和示例代码 工作流程 UI应用程序 Web API
  • 组件的松耦合

    我创建了一个提供消息 电子邮件和短信的类库 程序集 该类库定义了一个接口 IMessenger EmailMessage 和 SmsMessage 类都实现了该接口 我认为这是一个通用库 它将成为我的基础设施层的一部分 并且可以 可以在任何
  • 微软机器人框架自行崩溃[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我收到这个令牌请求 error invalid request error description AADSTS90002 No
  • VS 代码评论面板

    我正在看 comments openPanel openOnSessionStartWithComments 在 VS Code 中设置 但我不太明白这是如何工作的 我在 Google 或 StackOverflow 上找不到任何关于此的信
  • 配置对象无效。 Webpack 已使用与 API 架构不匹配的配置对象进行初始化

    我有一个从在线课程创建的简单的 helloworld React 应用程序 但是我收到此错误 配置对象无效 Webpack 已使用初始化 配置对象与 API 架构不匹配 配置有一个未知属性 postcss 这些属性有效 object amd
  • 防止SDL程序消耗额外资源

    我正在设计应该在图像上展示开放简历的程序 我注意到基本 SDL 应用程序的概念非常糟糕 它由循环和延迟组成 while true while event is in buffer event process event event do s
  • python中全局变量的频率?

    Stack Overflow 有很多关于 python 中的全局变量的问题 它似乎给来自其他语言的人们带来了一些困惑 范围界定规则并不完全按照许多来自其他背景的人所期望的方式发挥作用 同时 代码不应该在类级别上组织 而是在模块级别上组织 因
  • 在 Visual Studio 中构建完成后压缩文件

    我有一个要求 在构建解决方案文件后需要压缩一些文件 一旦我在发布 调试模式下构建项目 这可以自动实现吗 仅在进行 Release 构建时使用 powershell if ConfigurationName Release powershel
  • Keras 不在具有 python 3.5 和 Tensorflow 1.4 的 Pycharm 上使用 GPU [重复]

    这个问题在这里已经有答案了 from tensorflow python client import device lib def get available gpus local device protos device lib list
  • 使用 Retrofit observable 处理网络错误

    当将 Observables 与 Retrofit 结合使用时 如何处理网络故障 鉴于此代码 Observable