如何解决RxJava onSuccess()方法中的意外返回值?
我打算从以下内容重构我的一个方法:如何解决RxJava onSuccess()方法中的意外返回值?,java,android,rx-java,rx-android,Java,Android,Rx Java,Rx Android,我打算从以下内容重构我的一个方法: if (!isMobileBluetoothOn()) { sendError(); return false; } 对此 getBluetoothState().subscribe(state->{ if(!state.isEnabled()){ sendError(); return false;
if (!isMobileBluetoothOn()) {
sendError();
return false;
}
对此
getBluetoothState().subscribe(state->{
if(!state.isEnabled()){
sendError();
return false;
}
});
但是我在IDE“意外返回值”中遇到了这个错误,如何在onSuccess方法中返回布尔值?我建议您将逻辑拆分为如下内容:
Observable<Boolean> isBluetoothEnabled = getBluetoothState()
.map(state -> {state.isEnabled()})
.replay(1)
.refCount()
...
// use isBluetoothEnabled for something you need
...
isBluetoothEnabled
.subscribe(isEnabled -> {
if (!isEnabled) {
sendError()
}
})
observeable isBluetoothEnabled=getBluetoothState()
.map(state->{state.isEnabled()})
.重播(1)
.refCount()
...
//使用IsBluetooth为您所需的内容启用
...
是否启用蓝牙
.订阅(已启用->{
如果(!isEnabled){
sendError()
}
})
我真的不知道你的情况,但你说:
实际上,我在一个返回类型为boolean的方法中调用它,我 要从onSubscribed方法返回该布尔值吗 看起来您将同步获取布尔值。对于反应式编程来说,这绝对是一种不好的做法,但无论如何,您可以使用
可观察的作为阻塞可观察的。代码如下所示:
val isEnabled = getBluetoothState().toBlocking().first().isEnabled()
您可以在此处阅读有关阻止可观察的的更多信息:
尽量避免这种做法,但有时你必须使用它,可能是你的情况
祝你好运 使用map
而不是subscribe
,您将得到可观察的
实际上,我在一个返回类型为boolean的方法中调用它,我想从订阅中返回该booleanmethod@Reyjohn这是不可能的subscribe()
运算符只返回subscribe
对象(顺便说一句,您需要在某处取消订阅)。正如我在回答中提到的:您可以使用isBluetoothEnabled.map{…}
来获取此布尔值