问题标签 [android-livedata]

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 投票
6 回答
11957 浏览

android - 是否可以强制 LiveData 值不可为空?

有没有办法强制 LiveData 值不可为空?默认观察者实现似乎有 @Nullable 注释,它强制 IDE 建议该值可能为 null 并应手动检查:

0 投票
1 回答
448 浏览

android - LiveData 观察者不会在回调时触发

发出回调时不会触发 LiveData 观察者。但是,如果我将可观察数据放在一个函数中并更改数据,它就可以正常工作。请问有什么想法吗?

0 投票
0 回答
588 浏览

android - LiveData 小部件生命周期感知吗?

我一直在探索 android 的架构组件。我不确定是否可以将架构组件与小部件生命周期一起使用。我浏览了很多,但没有任何信息可用于我们是否可以使用LiveData和其他架构组件,如带有小部件的 View-Model?如果是,那么正确的方法是什么?

0 投票
0 回答
424 浏览

android - 加载数据 Reactive / non-reactive, LiveData, RxJava

我首先要说我已经阅读了一百万个博客,观看了一千个视频,但我对页面越来越感到困惑。在输入所有这些内容时胡思乱想有助于我解决一些问题。

TL; DR 主要问题是如何为 UI 层和通常(在方法中内联)检索数据的反应性(使用后台线程)对于已经在后台线程上调用您的方法的业务层方法。您的 Repo 和 Dao 是否需要多种方法来执行相同的查询?


使用 MVVM 架构。来自新 Android 架构组件的 ViewModel 实现负责处理生命周期问题,所以让我们使用它。

使用 Room 数据库组件实现的数据库 - 所有设置都完美运行,这就是如何在我的应用程序中检索不同层的数据,这让我很困扰。

我们将举一个简单的例子,通过 Id 从数据库中检索产品。

LiveData 如果您只想在 UI 中显示数据,此选项似乎很好。您的活动或片段创建 ViewModel,设置等待数据的观察者。

然后可以通过调用 ViewModel 中的方法来加载产品,响应被吐出到我们在观察者中设置的 doSomethingWithProduct()

ViewModel 有一个方法

存储库有一个非常相似的方法

最后是 Room 架构的 Dao 作为一种方法来进行实际的数据库检索。

我们使用从数据库到 Observer 的 LiveData,一切都很顺利。因为 Dao 是 LiveData,所以检索是在后台线程上完成的,该线程负责处理 Room 吐出的 ANR。对于检索数据以进行简单显示,这条路线似乎很完美。

然而,并非一切都与 UI 有关!

该应用程序比这更复杂。我正在将库存项目添加到库存中,并且基于存储在产品/位置等中的几个业务规则,我可能需要将其放入隔离区或拒绝它。

  • Activity 不应该实现这些业务规则,它的工作是简单地与用户沟通,另外可能有几个 Activity 可以添加库存项目

  • ViewModel 不应该实现这些业务规则,多个活动可能需要相同的规则。

  • 存储库不应该实现这些业务规则——应该吗?

我会在 StockItemBL(业务层)中实现这些规则。AddItemToStock 方法。

现在我需要从数据库加载产品,但我不想要 LiveData<>。我不想以响应式方式加载产品,我不需要在 BusinessLayer 中响应式,当您需要加载多个 Db 表来执行业务逻辑时它就不起作用。我只想要一个好的旧时尚

但该方法返回一个 LiveData,而不仅仅是一个 POJO 产品 我现在需要在存储库中使用另一个方法吗?

我也以同样的方式看待 RxJava。
你可以从 Dao 返回一个 Maybe,事实上,Rx 更容易管理异常。但它有同样的问题——你的存储库和 Dao 中是否需要单独的方法。

事实上,使用 Repository 的原因是您可以切换实现。如果您的方法公开 LiveData 或 Maybe 那么您真的可以轻松切换实现吗?

0 投票
1 回答
6084 浏览

android - 第二次观察viewmodel在android中返回null

在我的 android 应用程序中,我遵循 mvvm 模式的架构组件。我的应用程序进行网络调用以显示天气信息。api 调用是从存储库进行的,它返回对视图模型的响应的实时数据,而我的主要活动又会观察到它。

该应用程序工作正常,除了一种情况外,每当我断开互联网以测试失败案例时,它都会根据需要扩展错误视图

在错误视图中,我有一个重试按钮,它使方法调用以再次观察视图模型(此方法也由 oncreate() 第一次调用,有效)

即使在打开互联网后,点击监听 observable 的重试按钮,数据仍然为空。

我不知道为什么。请任何人帮忙

存储库

视图模型

在活动中观察方法

活动中的重试按钮

0 投票
2 回答
1354 浏览

android - Android Live 数据观察者异常

我正在尝试实现新的 android 架构组件,并在片段和视图模型中使用了实时数据,但是当我向实时数据添加观察者时,应用程序崩溃并抛出此异常。

列表片段:

视图模型:

注意数据库:

如果在实时数据上添加正面,应用程序会崩溃。

我正在使用“Room.databaseBuilder(....)”函数在我的应用程序类中构建数据库的单个实例,并在任何地方使用它,我的 NoteEntity 类有三个字段,一个是 id,它是自动生成的主键。

0 投票
2 回答
2081 浏览

android - 使用 observable 时的实时数据异常

当试图观察从 ViewModel 返回的片段中的实时数据时,在此之前我得到了以下异常我在这篇文章android.arch.lifecycle:common-java8:1.0.0-beta2中详细阐述了不同的错误交换 android.arch.lifecycle:compiler:1.0.0-beta2解决了这个问题,但现在我得到了以下异常

你可以在这里找到完整的代码

构建.Gradle:

0 投票
3 回答
38917 浏览

android - 为什么 LiveData 有一个单独的 MutableLiveData 子类?

它看起来MutableLiveDataLiveData仅公开setValue()postValue()方法不同,而在LiveData它们受到保护。

有什么理由为这种更改创建一个单独的类,而不是简单地将这些方法定义为LiveData本身是公共的?

一般来说,这种继承形式(增加某些方法的可见性是唯一的变化)是一种众所周知的做法吗?在哪些情况下它可能有用(假设我们可以访问所有代码)?

0 投票
1 回答
16447 浏览

android - 如何从 LiveData 中获取值?

我是第一次使用 Room。我正在查看 LiveData 概念。我知道我们可以将数据库中的记录提取到 LiveData 并附加观察者。

但是我在后台执行同步,我需要从服务器获取数据并将其与 RoomDatabase 表中称为“用户”的数据进行比较,然后从用户表中插入、更新或删除。在采取任何行动之前如何遍历 LiveData 列表?因为如果我把它放在 for 循环中会出错。

或者我不应该在这种情况下使用 LiveData 吗?

我想我需要打电话

但这是正确的做法吗?这里有更多代码可以说明我正在尝试做什么:

在哪里:

updateUsers() 中的第一行是在插入新数据之前从数据库获取数据以进行处理的正确方法,还是应该改为

谢谢,

0 投票
5 回答
5740 浏览

android - 没有 Room 的 NetworkBoundResource 助手类

当我尝试为 Room Db 和 Retrofit 实现NetworkBoundResourcehelperResource类时,它运行良好。但是,我需要使用Retrofit 来实现来自 RESTful 的搜索结果,而无需 Room。课程很好,Resources我不需要改变它。我想要做的是尝试删除此类中的数据库源。