Tag: rx kotlin

RuntimeException处理最佳实践

RuntimeExceptions应该表示编程错误,并且当我的observables里面的东西抛出RuntimeException时,我希望我的应用程序崩溃。 做这个的最好方式是什么? 现在我正在考虑这个解决方案(这是Kotlin,但我希望这是可以理解的) fun Observable.subscribeCrashOnRuntimeException(onNext: (T) -> Unit, onError: (Throwable) -> Unit) { this.subscribe({ onNext(it) }, { e -> if (e is RuntimeException) { throw e } else { onError(e) } }) } fun usageExample() { val observable = Observable.just(1) observable.subscribeCrashOnRuntimeExceptions( { next -> Log.d(“TAG”, “next: $next”) }, { e -> Log.d(“TAG”, “error: $e”) } […]

在RxKotlin / RxJava中用BehaviorSubject自动创建热可观察对象

目前我正在使用RxKotlin在Kotlin上建立一个项目。 我与Rx的背景主要是基于RxJS。 我经常用于在Typescript中创建hot observables模式的模式看起来是这样的: private dataStore: IFoo; private dataStoreSubject: BehaviorSubject = new BehaviorSubject(this.dataStore); public dataStoreObservable: Observable = Observable.from(this.dataStoreSubject); public getNetworkData(): Observable { return this.http.get() .map((response: IResponse) => { this.dataStore = response; this.dataStoreSubject.next(this.dataStore); return this.dataStore; }); } 这将允许我暴露一个Observable ,而不暴露Subject和后续的subject.next(); 方法。 我的问题是:在RxKotlin或RxJava中建立类似逻辑最常用的方法是什么?

RxKotlin(RxJava2)timeout()不会抛出TimeoutException

我试图得到一个使用两个不同超时值的示例工作。 第一个排放量的初始值较大,随后的所有排放量则为较短的值。 这个例子是从RxJava v1x的Java转换为Kotlin,虽然我试图这是v2x(不知道这是否有任何区别)。 问题是第一个事件的超时不会引发TimeoutException 。 设置的值低于500毫秒,我期待一个堆栈跟踪打印,但我得到的输出,如果没有发生超时(后续排放超时设置为40毫秒导致堆栈跟踪如预期)。 以下示例阻止成功初始超时有什么问题? fun nextSolarEclipse(after: LocalDate): Observable { return Observable .just( LocalDate.of(2016, Month.MARCH, 9), LocalDate.of(2016, Month.SEPTEMBER, 1), LocalDate.of(2017, Month.FEBRUARY, 26), LocalDate.of(2017, Month.AUGUST, 21), LocalDate.of(2018, Month.FEBRUARY, 15), LocalDate.of(2018, Month.JULY, 13), LocalDate.of(2018, Month.AUGUST, 11), LocalDate.of(2019, Month.JANUARY, 6), LocalDate.of(2019, Month.JULY, 2), LocalDate.of(2019, Month.DECEMBER, 26) ) .skipWhile { date -> !date.isAfter(after) } .zipWith( Observable.interval(500, […]

如何做一个组,并使用RxJava和Kotlin收集?

我有Observable和Rate是一个简单的对象: Rate(val value:String){} Rates(val rates: List) 我想将Observable改为Observable<HashMap 。 Rates(arrayOf(Rate(“1”),Rate(“2”), Rate(“3”),Rate(“3”), Rate(“2”),Rate(“2”)))我期望的结果: (1 -> 1) (2 -> 3) (3 -> 2) (4 -> 0) (5 -> 0) 我开始创建这样的东西: service.getRates() .flatMap {it-> Observable.from(it.rates) } .filter { !it.value.isNullOrEmpty() } .groupBy {it -> it.value} .collect({ HashMap()}, { b, t -> b.put(t.key, t.count???)} 但我卡在这里,我不知道所有的价值? 我不知道如何添加空值(0),如果没有5个4.有没有办法使用rx做到这一点?

我无法从rxkotlin的groupby得到地图

你能帮我这个rxkotlin groupby不工作吗? 在rxjava而不是kotlin工作。 高度赞赏你的帮助

如何从generic observable订阅PublishRelay?

科特林代码: fun Observable.circuitBreaker(): Observable { val relay = PublishRelay.create() this.subscribe(relay) return relay.toFlowable(BackpressureStrategy.LATEST).toObservable() } 上面是一个我正试图转换成Swift的Kotlin代码。 但是,我正面临一个错误,说不能将types’PublishRelay’types的值转换为期望的参数types’(Event ) – > Void’ SWIFT代码: extension Observable { func circuitBreaker() -> Observable { let relay = PublishRelay() self.subscribe(relay) return relay.asObservable() } } 任何帮助,将不胜感激。

Kotlin合并了两个可空的可变列表

val mutableList1: MutableList? val mutableList2: MutableList? addAll方法可以用来合并可空的可变列表,但是,在这里它会引发我编译时错误。 例: val map1 = listOne?.map { TeamInvitationData(it) } val map2 = listTwo?.map { TeamInvitationData(it) } map1.addAll(map2) types接口失败,请尝试显式指定types参数。 在这里任何方式可以合并这两个数组,事先感谢。

Kotlin高阶函数和单方法接口的行为?

我之前在使用RxJava和Kotlin时遇到了一些问题。 我做了一些有趣的发现,我仍然感到困惑。 RxJava中有简单的Func1接口 public interface Func1 extends Function { R call(T t); } 我试图添加一个扩展方法到一个Observable ,也是一个RxJava类。 这将收集排放到谷歌Guava ImmutableListMulitmap使用Func1来映射每个项目的关键。 fun Observable.toImmutableListMultimap(keyMapper: Func1): Observable<ImmutableListMultimap> { return this.collect({ ImmutableListMultimap.builder()},{ b, t -> b.put(keyMapper.call(t), t)}).map { it.build() } } 当我试图调用这个扩展方法时,我无法编译它,它根本不理解lambdaexpression式。 ScheduledItem.all.flatMap { it.rebuildSoftTransactions } .toImmutableListMultimap { it.id /*compile error */ } .cache() 然而,当我修改扩展方法使用函数types时,发生了最奇怪的事情。 fun Observable.toImmutableListMultimap(keyMapper: (T) -> K): Observable<ImmutableListMultimap> { […]

RxJava 2.0和Kotlin Single.zip()以及单曲列表

我有我无法解决的问题。 我试图将.zip(列表,)多个单打合并为一个使用Kotlin和我提供的函数作为第二个参数适合。 fun getUserFriendsLocationsInBuckets(token: String) { roomDatabase.userFriendsDao().getUserFriendsDtosForToken(token).subscribe( { userFriends: List -> Single.zip(getLocationSingleForEveryUser(userFriends), Function<Array<List>, List> { t: Array<List> -> listOf() }) }, { error: Throwable -> } ) } private fun getLocationSingleForEveryUser(userFriends: List): List<Single<List>> = userFriends.map { serverRepository.locationEndpoint.getBucketedUserLocationsInLast24H(it.userFriendId) }

Rx和Kotlintypes推断中的generics函数引用失败

我在Kotlin写了一个方法: fun fetchDepositSession(): Completable = Observable.fromIterable(session.accounts) .map(DepositSession::DepositAccount) .toList() .doOnSuccess(depositSession::depositAccounts::set) .flatMapObservable(Observable::fromIterable) .map(DepositSession.DepositAccount::account::get) .toCompletable() 该行.flatMapObservable(Observable::fromIterable)正在导致一个错误: