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

android - LiveDataReactiveStreams.fromPublisher() 不适用于 Single

Room通过返回从数据库获取用户Single<UserMinimal>。一旦我得到想要通过LiveData观察显示的数据,并且我正在使用LiveDataReactiveStreams.fromPublisher()方法,但看起来像何时.setValue()被调用,接收到的用户的所有属性都是空的。不知道是需要.subscribe()还是什么。

看起来对数据库的访问是成功的,因为如果我使用 MutableLiveData 而不是 MeadiatorLiveData,它确实有效:

0 投票
0 回答
68 浏览

android - 科特林。在一个视图模型中获取两个 Firebase 查询

我的应用程序中有多个 RecyclerView。每一个都包含相同的记录,但具有不同的过滤器。例如,第一个 RecyclerView 包含新记录,第二个 RecyclerView 包含最流行的,等等。

我正在尝试使用不同的过滤器获得“声音”。但最后我得到了 2 个相同的列表。

我的视图模型:

在片段中观察:

0 投票
0 回答
47 浏览

android - Transformations.distinctUntilChanged() 不适用于 equals() 覆盖

我的目标:我想使用 Transformations.distinctUntilChanged() 方法创建一个应用程序,该应用程序在每次更新 LiveData 对象时显示一条 toast 消息。LiveData 对象是一个简单的自定义 Integer 对象 (MyInteger),每次单击按钮时递增 1。当 myInteger 超过 5 时,应用程序应该停止显示 toast 消息。要实现这个 >5 条件,应用程序必须重写 MyInteger 类的 equals() 方法(在 distinctUntilChanged() 类中调用 equals() 方法)。

问题:在下面的代码中,currentValue 和 previousValue 字段始终相同(第一次单击按钮除外)。因此,在 MainActivity 中未调用 onChanged,并且从第二次单击开始不会显示 Toast 消息。有关当前结果与我期望应该发生的情况,请参见下文。

请帮忙。同样,应用程序必须同时使用 distinctUntilChanged() 和覆盖的 equals() 方法。

块引用

块引用

块引用

0 投票
1 回答
118 浏览

java - 房间数据库不在后台线程上运行我实现的事务

这个问题是我为我的另一个问题尝试过的解决方案,所以如果您对第一个问题有解决方案,可以避免这个问题,我会全神贯注。

所以我在 Dao ( getPageCombinedData) 中有这个方法,它带有注释@transaction并且应该返回一个 MediatorLiveData,我认为既然 MediatorLiveData 是 LiveData 的一个子类,那么 Room 将提供必要的代码来使用其文档中引用的后台线程返回它。

当 Room 查询返回 LiveData 时,查询会自动在后台线程上异步运行。

但相反,我得到了一个异常,告诉我我正在主线程上运行我的查询

我首先尝试在另一个线程上使用 Executer 进行此操作,但我发现每当数据库更新时,它永远不会用新数据到达我的观察者,因为我的代码看起来像这样

我的视图模型代码

这种方式只会在线程完成执行以及数据库更新时仅更新一次返回的 LiveData,我在 UI Fragment 中的观察者将永远不会知道它。

所以现在我不知道我应该如何返回这个 Mediator 以便我的 UI 观察它并在数据库中更新数据时更新 UI。

我的 Fragment 的代码应该遵守 Mediator

我的 PagesViewModel 代码:

我的 UserDao 代码应该构造 Mediator 对象:


更新

试图将我的代码移动到 ViewModel 中,但它告诉我无法在后台线程上添加源代码,因为它使用了 observeForever -_-*

我在 ViewModel 中尝试的代码

我得到的异常(第 59 行是addSource行)

简单明了地告诉我,我想要实现的目标是不可能的吗?

0 投票
1 回答
95 浏览

android - 在多个网络调用场景中,对 Livedata/MediatorLiveData 进行链式操作的 android 有效方式是什么?

在我的 todoApp 中,我以以下方式实现了 MediatorLiveData 以用于学习目的:

上面的代码工作正常。现在我想进行以下更改,但我不清楚如何实现它们。

  • 一旦 todoListMediator.addSource() 观察到 todoList: 1] 我想迭代那个原始的 Todo 列表并对每个元素进行网络调用并向它们添加更多字段。2] 我想保存新的待办事项列表(每个待办事项现在都有一些我们在步骤 1 中通过网络调用收到的额外字段) 3] 最后,我想将新的待办事项列表(带有额外字段)分配给 todoListMediator。

任何对代码有详细解释的技巧都会对我的学习有很大帮助。谢谢!

0 投票
1 回答
55 浏览

java - NullPointerException when using MediatorLiveData

I would like to display a sortable list of restaurants. It worked when I was using a simple LiveData, but I get a NullPointerException since I changed it for a mediatorLiveData.

In the fragment, i use these lines to observe the mediatorLiveData

And here the viewmodel class :

This is the error, I get java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.lifecycle.LiveData.observeForever(androidx.lifecycle.Observer)' on a null object reference

I have no error if I observe the livedata getAllRestaurantsViewStateLD() in the fragment, so I think I did not get something in the use of mediatorLiveData Do you see what it is?