My implementation to fix this: ``` /** * This Cal...
# rx
t
My implementation to fix this:
Copy code
/**
 * This CallAdapter Factory makes sure all callbacks on [Observable] and [Single] are executed on the main thread.
 */
class AndroidRxJavaCallAdapterFactory: CallAdapter.Factory() {
    private val rxJavaCallAdapterFactory = RxJavaCallAdapterFactory.createWithScheduler(<http://Schedulers.io|Schedulers.io>())

    @Suppress("UNCHECKED_CAST")
    override fun get(returnType: Type, annotations: Array<out Annotation>, retrofit: Retrofit): CallAdapter<*>? {
        val callAdapter = rxJavaCallAdapterFactory.get(returnType, annotations, retrofit)
        val rawReturnType = (returnType as? ParameterizedType)?.rawType

        return when(rawReturnType) {
            Observable::class.java -> AndroidObservableCallAdapter(callAdapter as CallAdapter<Observable<*>>)
            Single::class.java -> AndroidSingleCallAdapter(callAdapter as CallAdapter<Single<*>>)
            else -> callAdapter
        }
    }

    private class AndroidObservableCallAdapter(val delegate: CallAdapter<Observable<*>>) : CallAdapter<Observable<*>> by delegate {
        override fun <R : Any?> adapt(call: Call<R>?): Observable<*> {
            return delegate
                    .adapt(call)
                    .observeOn(AndroidSchedulers.mainThread())
        }
    }

    private class AndroidSingleCallAdapter(val delegate: CallAdapter<Single<*>>) : CallAdapter<Single<*>> by delegate {
        override fun <R : Any?> adapt(call: Call<R>?): Single<*> {
            return delegate
                    .adapt(call)
                    .observeOn(AndroidSchedulers.mainThread())
        }
    }
}