问题标签 [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.
android - LiveDataReactiveStreams.fromPublisher() 不适用于 Single
我Room
通过返回从数据库获取用户Single<UserMinimal>
。一旦我得到想要通过LiveData
观察显示的数据,并且我正在使用LiveDataReactiveStreams.fromPublisher()
方法,但看起来像何时.setValue()
被调用,接收到的用户的所有属性都是空的。不知道是需要.subscribe()
还是什么。
看起来对数据库的访问是成功的,因为如果我使用 MutableLiveData 而不是 MeadiatorLiveData,它确实有效:
android - 科特林。在一个视图模型中获取两个 Firebase 查询
我的应用程序中有多个 RecyclerView。每一个都包含相同的记录,但具有不同的过滤器。例如,第一个 RecyclerView 包含新记录,第二个 RecyclerView 包含最流行的,等等。
我正在尝试使用不同的过滤器获得“声音”。但最后我得到了 2 个相同的列表。
我的视图模型:
在片段中观察:
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() 方法。
块引用
块引用
块引用
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
行)
简单明了地告诉我,我想要实现的目标是不可能的吗?
android - 在多个网络调用场景中,对 Livedata/MediatorLiveData 进行链式操作的 android 有效方式是什么?
在我的 todoApp 中,我以以下方式实现了 MediatorLiveData 以用于学习目的:
上面的代码工作正常。现在我想进行以下更改,但我不清楚如何实现它们。
一旦 todoListMediator.addSource() 观察到 todoList: 1] 我想迭代那个原始的 Todo 列表并对每个元素进行网络调用并向它们添加更多字段。2] 我想保存新的待办事项列表(每个待办事项现在都有一些我们在步骤 1 中通过网络调用收到的额外字段) 3] 最后,我想将新的待办事项列表(带有额外字段)分配给 todoListMediator。
任何对代码有详细解释的技巧都会对我的学习有很大帮助。谢谢!
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?