问题标签 [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 回答
11124 浏览

android - 在 Kotlin for Android 中编程时使用 RxAndroid 或 RxKotlin?

我将开始在我的 Android 项目中使用响应式编程。我使用 Kotlin 作为主要语言,现在我想申请 Rx。我的第一选择是 RxAndroid,但后来我注意到有 RxKotlin。

据我所知,两者都是从 RxJava 派生的,所以 RxAndroid 可能为 android 常见任务提供了一些 API。另一方面,RxKotlin 开箱即用地支持lambas,并允许我避免将 kotlin 与 java 混合。

在这种情况下,哪个是首选库?

0 投票
2 回答
581 浏览

android - Kotlin 库 'rxkotlin-0.21.0.jar' 的格式不受支持。请更新库或插件

标题中的错误出现在 Android Studio 中,作为我所有代码上方的警告栏:错误

Android Studio 版本:Android Studio1.1.0
的 Kotlin 插件版本:0.11.91.AndroidStudio.4
build.gradle似乎正在使用所有最新版本的 Kotlin 库的文件:

0 投票
1 回答
895 浏览

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

我之前在使用 RxJava 和 Kotlin 时遇到了一些问题。我做了一些有趣的发现,但我仍然对此感到困惑。

Func1RxJava中有简单的接口

我试图向Observable一个 RxJava 类添加一个扩展方法。这会将排放物收集到 Google GuavaImmutableListMulitmap中,并使用 aFunc1映射每个项目的密钥。

当我试图调用这个扩展方法时,我无法编译它,它根本不理解 lambda 表达式。

然而,最奇怪的事情发生在我将扩展方法修改为使用函数类型时。

然后一切都编译得很好。但这让我感到困惑:为什么它没有将 lambda 推断到接口上?当我在它上使用标准map()方法时,Observable它可以使用花括号{ }语法很好地推断出 lambda。但是为什么它不适用于我上面的扩展方法呢?

0 投票
2 回答
4795 浏览

kotlin - Kotlin lambda 语法混淆

我对 Kotlin lambda 语法感到困惑。

起初,我有

效果很好

然后我将 onNext 移动到另一个名为 GroupRecyclerViewAdapter 的类,它实现了Action1<ArrayList<Group>>.

但是,我得到了错误:

错误

我可以通过更改为:

有没有办法在不指定类型的情况下编写 lambda?( Action1<kotlin.Throwable>, Action0)

注意:subscribe 是 RxJava 方法

编辑 1

0 投票
1 回答
1058 浏览

android - 使用 RxJava 将本地数据与远程(或缓存)数据连接起来

这是工作代码,但我有几个问题以及关于改进它的建议请求。我是 RxJava 的新手,我还没有完全理解如何将这些类型的 observables 链接在一起。

我有两个模型对象,ListItemUserInfo. ListItems 存在于本地数据库中,并且UserInfo使用ListItem.

Web 服务接受一UserInfo组 ID,它将为其返回一个UserInfo对象列表。

这段代码的流程如下:

  1. ListItem从数据库中加载
  2. 使用ListItem从数据库中获取的 s,检查内存缓存以查看我是否已经获取UserInfo了特定的ListItem
  3. 对于任何UserInfo未缓存的项目,从网络中获取它们
  4. 将获取的UserInfo对象放入缓存中
  5. 重新运行第2步(方法是loadCachedUserInfo
  6. 将结果返回给订阅者

注意:仅当列表已被视为 a 时,UserInfo才应为 a 获取对象。ListItemisUserList

这是代码:

用户将通过调用以下命令来启动事件序列:

ListController.itemsInList(list)

我对这段代码的问题是:

  1. 当前loadCachedUserInfo接收一个数组,ListItem并在缓存项与它关联后返回相同的数组作为可观察对象。这对我来说感觉不对。我认为这个调用应该只返回UserInfo与其关联的缓存项。但是,我需要继续将完整数组传递ListItem给下一个方法

2.) 我需要做额外的工作来支持退订吗?

3.) 这是类似的问题 1. MyfetchUserInfoForListItems接受一个列表项数组,并在它们被获取并通过缓存方法重新运行后返回一个具有相同列表项数组的 observable。这对我来说也是不正确的。我宁愿这个方法Observable<List<UserInfo>>为获取的对象返回一个。我不明白如何itemsInListListItems 与新获取的相关联并返回这些sUserInfo的 Observable 。ListItem

编辑:写完这篇文章后,它帮助我意识到了一些事情。我可以 flatMap 将我的调用包装在一个 Observable.create 中,它可以包含我想从我的 .create 中取出的智能fetchUserInfoForListItems,让我解决问题 #3。这是更新的代码:

0 投票
0 回答
543 浏览

android - OnComplete 从未使用 toSortedList() 和 groupBy() 调用

我目前正在使用 Android-ReactiveLocation 库(Github)。(代码LastKnownLocationObservable)按预期工作。我正在使用 a从数据库中获取附近的电台,并且(因为领域)我正在从数据中创建一个模型。所以我有一个项目列表,我正在创建新的Observable 。flatMapflatMapObservable.from(data)

然后我想对位置进行排序,过滤它们并将它们分组。

但是,当我订阅 Observable 时,永远不会调用 onComplete。Observable 只是停在toSortedList().

订阅:

0 投票
1 回答
3785 浏览

kotlin - rx kotlin 订阅不起作用,不接收项目

我创建了一个返回Observable<String>带有文件名的函数,但是在调用此方法的订阅中没有收到任何事件。也没有调用 onError 或 onComplete
请参阅我的代码:

尽管getAllFiles()函数中调用了所有内容,但我错过了什么?

0 投票
1 回答
625 浏览

rx-java - 我可以创建一个 Kotlin 扩展方法来将 rxJava 订阅添加到 CompositeSubscription 吗?

我一直在玩 Kotlin/RxJava 并尝试创建一个扩展方法来将 a 添加Subscription到 a CompositeSubscription,它的工作方式如下:

这是我迄今为止的尝试:

它编译并运行没有错误,但似乎并没有真正SubscriptionCompositeSubscription. 难道我做错了什么?

0 投票
1 回答
2002 浏览

android - RxAndroid - 点击时重试可观察

我在我的 Android 应用程序中使用 rxAndroid 和 rxKotlin 来异步处理网络请求。现在我想仅在单击 Snackbar 按钮后重试失败的网络请求。

我现在的代码:

城市改造界面:

API工厂:

我怎样才能以这种方式重新启动 observable?

0 投票
2 回答
2958 浏览

stream - RxJava - 将 Observable 转换为 Iterator、Stream 或 Sequence

我知道这违反了很多 Rx 规则,但我真的很喜欢RxJava-JDBC,我的队友也很喜欢。关系数据库是我们工作的核心,Rx 也是如此。

但是,在某些情况下,我们不想作为 an 发出,Observable<ResultSet>而是希望只使用基于拉取的 Java 8Stream<ResultSet>或 Kotlin Sequence<ResultSet>。但是我们非常习惯 RxJava-JDBC 库,它只返回一个Observable<ResultSet>.

因此,我想知道是否有一种方法可以使用扩展功能将 anObservable<ResultSet>转换为 a Sequence<ResultSet>,而不进行任何中间收集或toBlocking()调用。以下是我目前所拥有的一切,但我现在正在尝试连接基于推拉的系统,我无法缓冲,因为ResultSet每次onNext()调用都是有状态的。这是不可能完成的任务吗?