Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决RxJava onSuccess()方法中的意外返回值?_Java_Android_Rx Java_Rx Android - Fatal编程技术网

如何解决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{…}
来获取此布尔值