问题标签 [mediatorlivedata]

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 回答
715 浏览

java - 我的 MediatorLiveData 没有更新

我不知道为什么我的 mediatorLiveData 没有更新?我还在我的活动文件中设置了观察者。我想做的是

  1. 单击一个按钮,将实时数据源添加到我的 mediatorLivedata
  2. 另一个将不断更改实时数据的按钮,以便我的中介实时数据应该更新(changeLiveData1 是此处的按钮)

我按照它似乎不起作用的顺序执行此操作。我也在构造调用期间初始化了我的第一点。还是同样的问题.. MainActivity.kt

MainViewModel.kt 类 MainViewModel : ViewModel() {

0 投票
0 回答
592 浏览

android-room - Android LiveData>:如何合并两个相似对象的数据源

我有一个名为 Transaction {} 的超类,还有两个扩展它的类

InTransaction 和 OutTransaction。

InTransaction 链接到另一个名为 Source 的 Room 实体,而 OutTransaction 链接到另一个名为 Category 的实体。

我能够单独观察每种类型的模型,它返回PagedList<? extends Transaction>.

在我的 PagedListAdapter 中,我想显示这两种类型的项目。但是我的 MediatorLiveData 实现似乎无法正常工作。似乎最近的类型替换了旧的类型,因此只显示一种类型的交易。

我希望能够看到所有类型的交易。以下是我当前的代码。

我确实了解 MediatorLiveData 不会为您进行合并,而只是通知您更改。

如何将两者合并PagedList为一个然后提交到列表?

我正在考虑做这样的事情,但不知道如何实例化聚合器PagedList

谢谢

0 投票
2 回答
395 浏览

android - MediatorLiveData This source was already added with the different observer in activity when navigate with onbackpressesed between activities

I have an ugly error with mediator live data... and I can´t understand the problem. I have one activity A which asks for messages to the backend, when I come back from the background I always have to refresh again if there is data, then always call in onResume() to get the info , my code is as follows

When I click on an item in the list, I go to another activity B which has a logic identical to the previous one but obviously with a different backend call. When I go back from activity B to activity A I have onActivityResult and I request the data for activity A again, everything works fine. The problem is the following, now I have had to add an activity C, which is navigated from activity B.

This activity C has the same call logic as the previous activities. The problem is that when I pressed on back from activity C and go to B, Activity B, I get an error in Activity A.

I add breakpoints in Activity A onResume and onActivityResult but never is called!!

I don´t understand the problem...

Can anybody help me?

0 投票
1 回答
649 浏览

java - “合并”数据或“设置”数据,MediatorLiveData

文档(https://developer.android.com/reference/androidx/lifecycle/MediatorLiveData)谈论合并数据......但功能显然是设置它。

当我考虑“合并”时,我会想到诸如 .add() 或 .put() 或 .set(X x, Y y),.. 之类的东西,我可以将 2 个对象捆绑在一个中,或者一个列表对象或对象数组。

但是函数说.setValue(),文档说合并

在此处输入图像描述

日志给我的印象是前 2 个 setValue() 被完全忽略:

在此处输入图像描述

所以不是:

只有第一个 .setValue(folders) 显示在 Fragment 上,我猜这只是因为它在 3 个要解决的查询中花费的时间最长。

MediatorLiveData

……

在此处输入图像描述

因此,如果我对合并的概念有误,我需要在其中使用 Diff.Util 执行 LiveData/MutableLiveData<List<?>> 来管理传入列表或单个对象以及处理异步时间的信号量( ?也许?)..和一个 .add() 和 .replace() 函数相应地,等等...,但是我可以使用任何 LiveData,而不是 MediatorLiveData<>。

有什么我可以用的吗?

我错过了什么?

最糟糕的是,如果 MediatorLiveData 像我认为的那样做,那么在正确处理其生命周期的同时将多个 LiveData 连接到单个观察者真的不难......重点是什么。

我看到一些使用 .combine(data1, data2) 的 Kotlin 示例,但该函数甚至不存在。

0 投票
1 回答
347 浏览

android - 哪个是组合多个 LiveData(s) 的更好方法:使用 MediatorLiveData 或 switchMap?

更推荐哪种方法来组合多个 LiveData(s):使用MediatorLiveDataor switchMap

MediatorLiveData方法可能更常见,但该switchMap方法看起来更简单。在许多情况下,这两种方法似乎都具有相同的目的。

0 投票
2 回答
851 浏览

android - Transformations.map() 返回空值

我正在编写一个程序,其中有两个 LiveData 对象,如图所示:

问题是每当我观察到selectedImages LiveData它工作正常,但是当我观察到selectedBitmaps LiveData它返回以下错误:

我认为 Transformations.map() 返回空值。我之前在一个项目中做过类似的事情,当我使用 Transformations.map() 时也发生了同样的事情。有谁知道为什么会这样?

0 投票
0 回答
736 浏览

android-lifecycle - Android MediatorLiveData 将多个 LiveData 结果组合成单个 LiveData 对象(在 Java 中)

我使用 2 LiveDatas 从单独的表到我的应用程序的存储库中。我将这两个LiveDatas 作为源添加到CustomMediatorLiveData扩展的类中MediatorLiveData。在each 方法的onChanged回调中,我将两个s 的值发送到一个将两者结合并返回一个设置为对象的单个方法中。我在我的存储库中创建了一个对象,并将这两个s 作为构造函数的参数传递。addSourceLiveDataLiveDataLiveDatavalueCustomMediatorLiveDataCustomMediatorLiveDataLiveData

这会运行并且不会给出任何错误,但它会弄乱 LiveData 本身的数据。

示例:如果日期最初是 2020 年 8 月 15 日,那么它可能类似于 0001 年 8 月 14 日。

CustomMediatorLiveData:

注意存储库类:

我尝试使用该MediatorLiveData对象并将两个LiveData源添加到存储库本身中,但同样的问题仍然存在。

实现这一点的正确方法是什么?如何将 2 LiveDatas 组合成一个LiveData可以观察到的单个。

0 投票
1 回答
162 浏览

java - 我需要对两个从单独的 SQL 查询返回的 livedata 对象执行算术运算(减法)

我是编码和移动应用程序开发的相对新手,但我热衷、热情并想学习!

这是我对 SO 提出的第一个问题,如果我以我问的方式破坏了礼仪,请提前道歉。

我正在编写一个应用程序来跟踪游泳者的个人最佳时间,我几乎完成了使用 Room 查询 sql db 的编码,并使用正常的 dao、存储库和视图模型架构来返回我的游泳时间和资格赛时间。最后一步是从项目资格时间中减去游泳运动员的比赛时间。这就是我挣扎的地方!

最初,我尝试如下嵌套我的 livedata 对象,但是在内部进行算术运算时,无法访问外部 livedata。

在对 SO 进行了一些研究之后,我遇到了以下问题,该问题表明 mediatorlivedata 是我处理多个 livedata 源所需的工具。但是,我似乎无法使用建议的代码来解决我的问题。

实时数据数学运算

任何有助于理解此代码和解释 mediatorlivedata 如何工作的帮助都将被接受。不幸的是,Android 开发者参考在这方面并不是很有帮助。

提前致谢,

伊尔

0 投票
1 回答
78 浏览

android - 如何将 MediatorLiveData 与抽象源一起使用

我有一个抽象类,MediatorLiveData里面有一个对象。这个对象有很多来源,其中一个依赖于子类,并且abstract在父类中。在块中添加源init会在运行时导致 NullPointerException,因为在 init 块添加源时,它仍然是抽象的(或者我被引导相信)。

有没有办法将 aabstract LiveData用作 a 的源MediatorLiveData而不必在子类中设置该源?我只想override val完成它,因为我肯定会addSources()在将来的某个时候忘记调用该函数。

(我知道这个例子并不是做这件事最有用的方法,但我不想增加不必要的复杂性)

例子:

在阅读了 Stachu 的回答后,我决定使用这个,我没有测试,但我认为应该可以:

0 投票
0 回答
44 浏览

android - 嵌套转换而不是合并的实时数据

我有两个 livedatas startedAt&finishedAt并希望在依赖于这两个值的转换中使用它们...我尝试使用 mediatorliveData 组合它们

并观察他们

但这并没有按预期工作,因为 finishedAt 在获得所需值之前返回 null ,

调试结果:

V/检查索引:0 1 空

V/检查索引:0 1 1

在转换中使用转换是个好主意吗?前任: