问题标签 [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 投票
0 回答
297 浏览

android - Kotlin 通用列表解析

我在寻找其他问题,但这个问题使用了不同的方法。

我在我的 Android 应用程序中使用 MVVM。

实际上这是我从服务器获取数据的方式:

  • 将 dataManager 注入 viewModel。
  • viewModel 调用 dataManager->fetchUsers
  • fetchUsers 向服务器发出请求并返回一个 Observable 的几个,在这种情况下应该是几个,但它是通用的。
  • viewModel 订阅了这个请求,并期望有几个。
  • 在这一点上,除了几个没有用户列表之外,一切正常。这几个有一个LinkedTreeMap的列表

在此处输入图像描述

我试图更改我的 dataManager 以返回一个字符串,然后在我的 viewModel 中映射响应,但问题是我必须在每个请求中都这样做。

我也尝试在我的 dataManager 中映射请求,但我得到了相同的链接树映射数组。

TypeToken 方法的问题是我必须在我的 viewModel 中进行映射。

更新

用户视图模型

获取函数:

fromJson 函数:

几个.kt

如果我将我的 GET 函数更改为返回一个字符串,那么在 UsersViewModel 中我添加一个像这样的 .map

然后我会得到一个预期的用户列表,但我不想做的是在 UsersViewModel 中映射响应,因为我必须在每个需要项目列表的请求中做。

有什么方法可以在我的视图模型中获得多个没有地图的对象?

0 投票
2 回答
332 浏览

rx-java - 扁平化 Observable 的 Observable

我想做的是创建一个每秒运行另一个函数的函数。第二个函数返回Observables<A>,我希望第一个函数也返回Observables<A>而不是Observable<Observable<A>>

例如:

所以我想做类似的事情(我试图用Java-ish方式写这个,但我会使用Kotlin)

0 投票
2 回答
1221 浏览

android - 将 RecyclerViews itemAnimator 设置为 null 不会删除动画

我的外部RecyclerView崩溃要么

或者

就像标题所暗示的那样,我在第一个RecyclerView的列表项布局中有一个RecyclerView. 此布局用于显示消息,内部用于显示消息RecyclerView附带的附件。内部RecyclerViews可见性设置为GONE或者VISIBLE取决于消息是否有任何附件。简化的外部列表项布局如下所示

处理内部的适配器部分RecyclerView看起来像这样

该错误与我在内部适配器中获取附件的方式有关,因为一旦我禁用启动下载过程的部分,一切都很好。从设备加载图像时没有问题,但是一旦我开始下载过程,一切都会变糟。这是处理图像并在内部适配器中启动下载过程的部分。我有视频和其他文件类型的功能,它们几乎完全相同,但布局略有不同。

我在DiscussionListAdapter加载讨论肖像(个人资料图片等)时使用与上述相同的结构,并且没有相同的问题。

这些是用于膨胀 viewHolders 和显示图像的扩展函数

在过去的几天里,我一直在做这个,只是无法理解它。非常感谢任何方向的任何帮助。我知道我的解释可能有点到处都是,所以只要在需要时要求澄清:)

更新

我现在已经能够用 aGridLayoutRecyclerView. 可以安全地假设嵌套RecyclerViews不是这里的罪魁祸首。我什至试图放弃处理加载图像并IntentService为该过程创建一个的 Rx-piece,但同样的崩溃仍然发生。

我的意思是,我没有使用GridLayout另一个适配器来填充嵌套,而是RecyclerView只使用一个适配器来填充消息并膨胀和填充附件的视图,并将这些视图附加到嵌套的GridLayout.

当我开始下载文件然后将视图(应该显示下载的文件)滚动到屏幕外时,就会发生崩溃。该视图应该被回收,但由于某种原因,下载过程(在我的测试用例中只需要大约 100ms-400ms)导致应用程序抛出原始问题中提到的两个错误之一。值得注意的是,我正在使用Realm并且适配器将RealmResults<Message>列表作为其数据集。我的演示者在列表中查找更改,然后在需要时通知适配器(由于 的实现而更改IntentService)。

这就是我能够一次又一次地重现这种情况的方式:

  1. 打开包含带有附件的消息的讨论
  2. 开始向上滚动以获取更多消息
  3. 传递带有附件的消息并在仍在加载时将其滚动到屏幕外
  4. 碰撞

如果我停止并等待下载完成并且一切都按预期工作,则不会发生崩溃。图像/视频/文件会使用正确的缩略图进行更新,如果我将其滚动到视野之外,应用程序不会崩溃。

更新 2

我尝试将嵌套交换ViewGroup为单个ImageView只是为了查看嵌套内的问题。瞧!它仍然崩溃。现在我真的很困惑,因为DiscussionListAdapter我之前提到的内容完全相同,而且它的作用就像一个魅力......我的搜索仍在继续。我希望有人,有一天会从我的痛苦中受益。

更新 3

我开始记录函数中每个ViewHolder的父级。就像预期的那样,在应用程序崩溃并吐出之前,onBindViewHolder()我得到了nullsafter 。nullsnulls

毕竟我的疯狂是有办法的!但这只会提出更多问题。为什么ViewOverlay在这里使用?作为 RecyclerView 的一部分,还是作为黑魔法师的一部分,计划剥夺我的理智?

边注

我深入RecyclerViews研究代码以检查是否能找到这个ViewOverlay谜团的原因。我发现只RecyclerView调用了适配器onCreateViewHolder()函数两次。两次都提供自己作为parent函数的参数。所以没有运气......到底是什么导致项目视图拥有ViewOverlay它的父级?父对象是一个不可变的值,因此将 设置为父对象的唯一方法ViewOverlay是构造一个新对象ViewHolder并将ViewOverlay对象作为父对象。

更新 4

有时我会惊讶于自己的愚蠢。使用ViewOverlay是因为项目正在被动画化。我什至不认为这是一个选项,因为我已经itemAnimatorRecyclerViewas设置了null,但由于某些奇怪的原因,它不起作用。这些项目仍在动画中,这导致了整个游戏。那么这可能是什么原因呢?(我是如何选择忽略移动项目的,我不知道,但是当我强迫应用程序一遍又一遍地下载同一张图片时,动画变得非常清晰,整个列表都变得混乱了。)

MyDiscussionInstanceFragment包含有问题的 RecyclerView 和嵌套的 ConstraintLayout,后者又包含EditText用户输入和发送按钮。

这是处理RecyclerView. 我肯定会设置itemAnimatoras null,但动画不会停止!我已经尝试animateLayoutChanges在根目录ConstraintLayout上设置 xml 属性,RecyclerView但它们都不起作用。值得一提的是,我还检查了程序的不同状态是否RecyclerView有一个itemAnimator,每次我检查动画师时,它都是空的。那么我的动画是什么RecyclerView?!

0 投票
3 回答
3255 浏览

android - RxJava2。对列表中的每个项目执行请求

我有一个清单List<FileModel>

FileModel只是一个类包含id: Int

id- 是我需要获取并投射到位图的照片文件的 ID

我有个请求:

此请求返回ResponseBody我们可以转换为 Bitmap

我想要的是创建一个函数

我已经尝试过这样的事情,但这是完全错误的

0 投票
1 回答
281 浏览

rx-java2 - 如果在 RxJava/RxKotlin 中未找到所有条目,则检查列表并超时

我有一个场景,我有一个函数 scanForTargets,它返回一个 FoundNumber 类型的 Observable。在 FoundNumber 中,我只需要一个可以从中获取的 ID 字段。当每个元素都返回到 scanResults Observable 中时,我想检查名称字段是否与目标列表中的一个名称匹配。如果是这样,那么我想发出它。例如,如果我要查找数字 1 和 2,并且 scanForTargets() 会返回 1、2、3 和 4,那么我希望 scanForValues 仅返回 1 和 2。

需要注意的是,我只想继续这样做,直到:1)经过一段时间(在这种情况下我抛出并出错)2)在超时之前找到字符串列表中的所有项目。

我到目前为止看起来像这样,但我无法让它为我工作,主要是因为停止一次的捷径/如果在超时之前找到所有目标。

如果我找到列表中的所有项目,如何添加检查以停止?我不能只添加另一个谓词,对吗?

谢谢。

更新:根据要求,这里有一些数据来说明我的意思。

假设 scanForTargets() 和支持代码如下所示:

现在,如果使用 1 和 2 的列表调用 scanForValues,那么它应该返回一个 1 和 2 的 Observable。

0 投票
1 回答
2009 浏览

android - 错误:从 Java 转换为 Kotlin 时,不能使用提供的参数调用以下函数

我在这里看到了与此错误相关的其他问题,但仍然无法修复。另外,我之所以问这个问题,是因为与这里的其他问题不同,只有当我将代码从 Java 转换为 Kotlin 时才会出现此错误。

我在 Java 中使用相同的 RxJava 代码,它工作正常。我转换为 Kotlin,它给出了这个错误 -

Kotlin 编译错误:不能使用提供的参数调用以下函数

谁能解释这里有什么问题?

0 投票
3 回答
11287 浏览

kotlin - RxJava Maybe:有什么巧妙的方法来处理 Empty case?

我被困在这个问题上,这应该很简单。Maybe我需要订阅者在完成后执行代码块Empty Maybe。我找到

  1. 我们可以传递默认的 Maybe 值或使用 switchIfEmpty 但我觉得两者都很老套。
  2. 还有一个订阅函数,它接受 onComplete 函数(以及其他两个事件的处理程序),但 onComplete 不接受任何可用于查找是否可能已完成空的参数。
  3. 另一种方法可能是Maybe.isEmpty.blockingGet(),但它也很脏。

我试过以下(Kotlin语法): -

但正如预期的那样,它运行了两次订阅,在这里测试:-

有人可以建议更简洁的方法来解决这个问题吗?

0 投票
3 回答
1451 浏览

java - .zip 方法中的 Observable 数量是否有限制?

在 Kotlin 的 zip 方法中用作参数的 Observable 的数量似乎是有限制的。如果这是准确的,那么最好的选择是什么?

例如,当我使用 9 个参数时,它按预期工作。当我添加第 10 个参数时,我收到错误无法推断此参数的类型。请明确指定

0 投票
2 回答
1014 浏览

android - RXKotlin 你如何映射到 void?

抱歉 nooby kotlin 问题

我如何返回一个可观察的 void?我试过了void,,,Void()Void

0 投票
1 回答
489 浏览

android - 改造动态 URL 仍附加到基本 URL

这是我的改造界面和创建代码:

这是我使用的方式disposable

当我执行请求时,我可以看到它OPEN_WEATHER_MAP_API_ENDPOINT仍然附加到 my baseUrl.

这是我的常量类供参考: