2017-10-10 38 views
-1

在initialize()方法的下面工作很好,但它必须与其他调用在同一个io线程(ioScheduler)上工作。RxJava Single.create无法指定线程

fun initialize(): Single<Boolean> { 
    return Single.create { callback -> 
       callback.onSuccess(true) 
    } 
} 

我试图将其更改为下面的代码:

internal fun initialize(): Single<Boolean> { 
    return Single.create<Any> { singleEmitter -> 
     singleEmitter.onSuccess(true) 
    } 
    .observeOn(ioScheduler) 
    .subscribe() as Single<Boolean> 
} 

但是,创建一个新的问题:

ConsumerSingleObserver不能转换到io.reactivex.Single

我我也试过这个:

Completable.fromAction { someMethod() } 
      .subscribeOn(ioScheduler) 
      .subscribe() 

但是,这不会返回布尔值。

+0

'subscribeOn'不能为''Single.create()'工作吗? – akarnokd

+1

吉姆,好久不见 –

+0

@TimCastelijns毕业了吗? ;)如果是这样,请解决这个问题。我知道你可以做到;) –

回答

-1

如果从UI线程调用该方法,比您将不会收到布尔,因为你已经订阅Completable的IO线程,你应该观察它在UI线程明确

+0

能不能真正进入kotlin和rxjava,请您阅读这个问题。 –

1

这个工作对我来说:

internal fun initialize(): Single<Boolean> { 
    return Single.create<Boolean> { singleEmitter -> 
     singleEmitter.onSuccess(true) 
    } 
    .observeOn(Schedulers.io()) 
} 

输出是布尔值,因此您应该指定<Boolean>作为create的确切类型参数。另外,您应该简单地返回链并且不订阅它。