我在项目中使用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/