问题标签 [rx-kotlin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
599 浏览

kotlin - RxKotlin flattenAsObservable():类型与方法引用不匹配

我正在将一些 Java 代码转换为 Kotlin,但遇到了一些问题flattenAsObservable()

Java 中的代码如下所示:

这是我目前在 Kotlin 中所拥有的:

它强调了第二个searchResults并给了我以下错误:

我可以换

它会起作用。如何正确参考方法?或者在这种情况下我不能的原因是什么?

根搜索响应:

0 投票
1 回答
102 浏览

java - 使用 RxJava 对状态重复操作

这是在 Kotlin 中,但我认为任何编写 Java 的人都能理解。

我正在尝试用 Rx 制作秒表,但在实际停止和启动时遇到了一些麻烦。最大的问题是我不知道如何保持当前时间,同时随着不同的动作(开始和停止)进入而对其进行修改。这就是我现在所拥有的。

WherefullTimecontrolCommandsare 分别Observable发出关于当前开始时间的事件以倒计时并说明下一步该做什么。我想链接controlCommands并能够保持状态开始,startTime当事件出现时将倒计时,PLAY出现时暂停,并在出现时PAUSE重置。startTimeSTOP

scan几乎可以工作,但我不知道在计时器达到 0 后如何停止并且PLAY仍然每秒发送一次,因为它会发送重复的信息。它也不允许状态和观察值之间的分离。因此,我累积的值scan必须与内部值的类型相同Observable(如果有意义的话)。

有什么想法我应该做什么?

0 投票
1 回答
955 浏览

rx-java - RxJava 2 相当于 isUnsubscribed

我一直在研究Reactive Programming with RxJava一书中的示例,它针对的是版本 1 而不是 2。无限流的介绍有以下示例(并注意有更好的方法来处理并发):

但是,在 RxJava 2 中,传递给create()方法的 lambda 表达式是类型的ObservableEmitter,并且 this 没有isUnsubscribed()方法。我查看了What's Different in 2.0并搜索了存储库,但找不到任何此类方法。

如何在 2.0 中实现相同的功能?

编辑以包含如下给出的解决方案(nb using kotlin):

0 投票
1 回答
1670 浏览

kotlin - RxKotlin collectInto() MutableList 使用方法引用

以下代码是我尝试将 RxJava 示例转换为 Kotlin。它应该将一堆Int' 收集到 aMutableList中,但我得到了很多错误。

错误:

如果我更改ImmutableList::addImmutableList<Int>::add,我摆脱了类型参数预期的错误,它被替换为:

这是 Java 中以下内容的直接副本:

我知道第一个错误告诉我它要么推断出不正确的类型,我需要更明确(在哪里?),但我认为这::MutableList相当于() -> MutableList<Int>. 第三个错误是告诉我它不能调用任何add()带有参数的方法,但同样,我认为这MutableList::add相当于{ list, value -> list.add(value) }. 第四个错误告诉我它无法确定应用于collector.

如果我改用 lambda 表达式,则没有错误:

我很感激一些关于我在方法引用上做错了什么的评论,因为很明显我误解了一些东西(通过Kotlin Language Reference,我想知道它现在是否甚至是一种语言功能?)。非常感激。

0 投票
2 回答
519 浏览

android - 为 Observable 流实现“阀门”,包括缓冲阀门重新打开之前发出的最后一个元素

我正在努力思考如何在 RxJava (2.0) 中实现某些东西。它适用于 Android,我使用的是 Kotlin,尽管平台和语言的选择在这里并不重要。

我的想法是我会在 RxJava 上建立某种 MVP 架构。在这个实现中,我正在考虑一个Activity(也可以是 aFragment或自定义View)公开一个值流(Boolean为简单起见 s ),这些值指示生命周期事件,或者视图是附加还是分离。

基本思想基本上是这样的:

然后从另一端,Presenter 公开一个Observable表示屏幕状态的对象流 - 由 View 呈现。

(这遵循本系列http://hannesdorfmann.com/android/mosby3-mvi-1中解释的概念- 这归结为这样一个事实,即演示者使用独立对象提供视图,这些对象完全封装了屏幕状态,而不是多个不同的视图上的方法)。

然后我想绑定这两个可观察的流,以便:

  • 每当 View 分离时,来自 Presenter 的输入都会被忽略(并且它没有被缓冲,以免遇到任何背压问题)

  • 然而,一旦 View 被重新连接,它就会获取Presenter 发出的最新状态。换句话说,最多只缓存一个状态实例。

它将按如下方式工作(String为简单起见,假设状态是类型):

我不确定最好的惯用解决方案是什么。

我试图将它实现为ObservableTransformer,但我不能完全正确。我相信转换器应该是无状态的,而我的解决方案倾向于明确跟踪发出的内容并“手动”缓冲最后一个元素等,这感觉很混乱而且太紧迫了,所以我认为这是错误的。

我找到了https://github.com/akarnokd/RxJava2Extensions/blob/master/src/main/java/hu/akarnokd/rxjava2/operators/FlowableValve.java,但实现看起来非常复杂,我不敢相信它可以'不要以更简单的方式完成(我不需要所有的灵活性,我只想要适用于所描述用例的东西)。

任何见解都将不胜感激,包括在 Android 的背景下是否还有其他我应该考虑的事情。另请注意,我不使用 RxKotlin 绑定(我可能会,我只是不认为这里应该需要它们)。

编辑:

下面是我目前的实现。正如我所说,我对此不太满意,因为它是明确的有状态的,我相信这应该以声明的方式实现,利用 RxJava 的一些结构。

我需要合并两个不同类型的流,因为combineLatestzip没有完全做到这一点,所以我使用了一个技巧,为两种不同类型的事件创建一个通用包装器。它再次引入了一定的开销。

0 投票
0 回答
1297 浏览

kotlin - 如果没有元素,RxJava2 可能返回空 Observable

有没有比and更好/更惯用的方式来使用MaybeJavaRx 2 中的类型?以下示例采用并尝试为他们预订随机机票。如果用户不存在,则返回空。flatMaptry/catchMaybe<User>Observable

必须将 转换Maybe<User>为 anObservable并从 an 开始,Observable<Observable<User>>然后我可以flatMaptry/catch. 只是想知道是否有更简洁的方法来做到这一点?

0 投票
1 回答
763 浏览

rx-java - RxKotlin (RxJava2) timeout() 不会抛出 TimeoutException

我试图让一个使用两个不同超时值的示例工作。第一次排放的初始值较大,然后所有后续排放的值都较小。该示例从 Java for RxJava v1x 转换为 Kotlin,尽管我正在尝试这是 v2x(不确定这是否有任何区别)。

问题是第一个事件的超时不会抛出TimeoutException. 将值设置为低于 500 毫秒,我希望打印堆栈跟踪,但我得到的输出好像没有发生超时(超时设置为 40 毫秒的后续发射会按预期产生堆栈跟踪)。以下阻止初始超时成功的示例有什么问题?

编辑:2017 年 6 月 20 日

使用 Kotlin 1.1.2-5,使用 IntelliJ,并应用建议的更改,我仍然得到错误。正如我所期望的那样,无论如何尝试运行代码都会产生:

Error:(34, 21) Kotlin: Interface Function does not have constructors

接口函数没有构造函数

0 投票
2 回答
89 浏览

rx-java - RxJava1:如何转换 Observable>> 到可观察的>

有人可以帮我找到解决我面临的这个问题的正确方法吗?

  1. 我有一个后端服务,可以为我Observables提供所需的数据,即Events.
  2. 形成 Event 我可以得到一个EventGroup,其中包含同一组中所有事件的 Id。
  3. 接下来,我可以获得Event属于该组的所有 s。

但是,我得到了一个Observable<List<Observable<Event>>>,我想得到一个Observable<List<Event>>。在不实际订阅嵌套的情况下,如何实现这一点Observables

TL:博士

我如何Observable<List<X>>Observable<List<Observable<X>>>?

0 投票
7 回答
25816 浏览

android - 如何使用 kotlin Android 从 Url 读取 JSON?

我正在使用 kotlin 开发应用程序。现在我想从服务器获取 JSON 数据。

在 java 中,我实现了 Asyntask 以及 Rxjava,用于从 Url 读取 JSON。我也在谷歌搜索,但我无法获得适合我要求的详细信息。

如何使用 kotlin 从 Url 读取 JSON?

0 投票
2 回答
685 浏览

android - 使用 RxKotlin 时如何指定 RxJava 的版本?

GitHub 上 RxKotlin 存储库中的文档没有指定明确依赖最新 RxJava 版本的方法。

如果我们看到build.gradle库的文件,它现在使用compile 'io.reactivex.rxjava2:rxjava:2.1.0'

但是,如果我们想跟上最新的 RxJava 版本而不是库中的那个版本怎么办。