使用Obtrable与Retrofit的NoSuchMethod异常是什么?

时间:2014-05-28 17:33:39

标签: android reactive-programming observable retrofit rx-java

我想在这里记录这个答案,以解决遇到同样问题的其他人的困惑。使用rxjava-core和rxjava-android的v0.18,每当我尝试从Retrofit调用返回一个Observable时,我得到以下NoSuchMethod异常。

  

java.lang.NoSuchMethodError:rx.schedulers.Schedulers.executor

为什么会发生这种情况?如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

使用Retrofit 1.5.1。

从其change log开始,重点补充。

  

版本1.5.1(2014-05-08)

     
      
  • 新:@PartMap注释接受多部分的键/值对映射。
  •   
  • 修复:MockRestAdpater使用其父RestAdapter中的ErrorHandler。
  •   
  • 实验性RxJava支持已针对v0.18进行了更新,现已暂时初始化。
  •   

答案 1 :(得分:1)

RxJava版本0.18已弃用并取消了Schedulers.executor。 RxJava团队认为支持此调度程序并维护Observable的功能反应式合同存在太多问题。似乎Retrofit依赖此调度程序来提供Observable结果。

有三种选择:

  1. 现在使用RxJava版本0.17。您应该知道执行程序调度程序不满足Observables的整个被动合同。阅读以下错误链接以获取详细信息,以便了解现有实施的弱点:

    https://github.com/Netflix/RxJava/issues/711 https://github.com/Netflix/RxJava/issues/713

    RxJava中有新的调度程序实现可以解决原始执行程序调度程序所具有的问题。你可以

  2. 等待新的Retrofit解决此问题或

  3. 热修补您的库副本以使用另一个可能表现不同的调度程序实现。
  4. 如果我能针对此问题提出针对Retrofit的通用补丁,我将编辑我的答案并提交拉取请求。我现在还不知道一个好的选择。在这一点上,RxJava作者正在热烈讨论这个问题。

    https://github.com/Netflix/RxJava/issues/1219