【问题标题】:can't find enclosing method 'void lambda$getTestFlowable$0(io.reactivex.FlowableEmitter)'找不到封闭方法'void lambda$getTestFlowable$0(io.reactivex.FlowableEmitter)'
【发布时间】:2017-05-12 10:04:05
【问题描述】:

我在我的项目中使用了 RxJava2 和 Retrolambda,有一段时间我感觉很好,将回调包装到 flowables 中,但是有一天我遇到了这个错误,如果我尝试在这个非常简化的代码 sn-p 上运行 proguard:

    private Flowable<Object> getTestFlowable() {
        return Flowable.create(emitter -> new Thread(new Runnable() {
            @Override
            public void run() {
                emitter.onNext("one");
                emitter.onComplete();
            }
        }).run(), BackpressureStrategy.BUFFER);
    }

然后我会收到这个警告,这会导致我的构建失败: 警告:com.yandex.testfield.MainActivity$1:在程序类 com.yandex.testfield.MainActivity 中找不到封闭方法 'void lambda$getTestFlowable$0(io.reactivex.FlowableEmitter)'

目前,我看到了两个解决此问题的临时解决方案:

  1. 不要使用 lambda 而是使用匿名类

    private Flowable<Object> getTestFlowable() {
        return Flowable.create(new FlowableOnSubscribe<Object>() {
            @Override
            public void subscribe(FlowableEmitter<Object> emitter) throws Exception {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        emitter.onNext("one");
                        emitter.onComplete();
                    }
                }).run();
             }
        }, BackpressureStrategy.BUFFER);
    }
    
  2. 对包含上述方法的类禁用 proguard

但我仍然想知道为什么会这样?这是 RxJava2\Retrolambda\Proguard 中的错误吗?

【问题讨论】:

    标签: java android proguard rx-java2 retrolambda


    【解决方案1】:

    是的,这是 retrolambda https://github.com/orfjackal/retrolambda/issues/121 中的错误

    在 2.5.1 中修复,合并到gradle-retrolambda 3.6.1

    更新到 3.6.1 后此错误消失

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多