我在项目中使用RxJava2和Retrolambda,一段时间以来,我感觉非常好,将回调包装到flowable中,但是有一天,我遇到了此错误,并且如果我尝试在这个非常简化的代码段上运行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)'

现在,我看到针对此问题的两个临时解决方案:


不要使用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);
}

在包含上面列出的方法的类上禁用proguard


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

最佳答案

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

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

更新到3.6.1后,此错误消失了

关于java - 找不到封闭方法'void lambda $ getTestFlowable $ 0(io.reactivex.FlowableEmitter)',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43934954/

10-09 08:00