我正在学习UDACITYs关于LiveData/Room/Persistence和Repository架构的Android教程。
在将所有代码粘在一起之后,我遇到了类型不匹配异常(我认为这是一个非常常见的问题)。
在课程示例中,创建了一个VideosRepository,成员videos是一个LiveData:
class VideosRepository(private val database: VideosDatabase) {
/**
* A playlist of videos that can be shown on the screen.
*/
val videos: LiveData<List<Video>> =
Transformations.map(database.videoDao.getVideos()) {
it.asDomainModel()
}
在模型中,我引入了一个MutableLiveData的_video
val playlist = videosRepository.videos //works fine
// added by me
private val _video = MutableLiveData<List<Video>>()
val video: LiveData<List<Video>> = _video
当我试图访问LiveData时,这就是我获得类型不匹配的地方。
fun sample(){
_video.value = videosRepository.videos //does not work and throws a Type mismatch.
//Required: List<Video> Found: LiveData<List<Video>>
}
fun getVideos(): List<Video>{
return database.videoDao.getVideo()
}
我理解OOP和Java的概念,但从来没有过深入的实践经验,所以请大家多多包涵。
_video.value
的输入是列表
但您分配的是VideosRepository.Video
是LiveData
您必须从LiveData获取列表
:
_video.value = videosRepository.videos.value
我的应用程序获取顶级评级或最受欢迎的电影从themoviedb.org. 我正在尝试用LiveData实现ViewModel来切换这两个按钮。在MainViewModel中。java,我有这个: 在我的主要活动中。java,按钮有一个onclick监听器,我将观察者设置为: 问题是,当您将ViewModel的“电影”变量重新分配给最高等级或最受欢迎的电影列表时,它不会触发onChanged()。最
我读了文档,但在某些部分变得迷惑了。 ViewModel对象被设计为比views或LifeCycleOwners的特定实例化更长寿。这种设计还意味着您可以编写测试以更容易地覆盖ViewModel,因为它不知道视图和生命周期对象。ViewModel对象可以包含LifecycleObservers,如LiveData对象。但是,ViewModel对象绝不能观察到生命周期感知的可观察对象(如LiveDa
我有一个单独的类来处理数据提取(特别是Firebase),我通常从它返回LiveData对象并异步更新它们。现在我希望将返回的数据存储在ViewModel中,但问题是为了获得所述值,我需要观察从数据提取类返回的LiveData对象。observe方法需要一个LifecycleOwner对象作为第一个参数,但我的ViewModel中显然没有这个对象,而且我知道我不应该在ViewModel中保留对ac
我正在寻找在中观察数据的最佳方法。 我正在使用MVVM数据绑定。 存储库: 它从服务器请求数据并返回实时数据。ViewModel必须观察数据更改。 视图模型: ViewModel使用一个来观察来自存储库的的变化。我添加了数据作为源来观察变化,并在它触发后将其删除,以防止在我多次获取数据时多次触发事件。并且必须有一个虚假的观察者来观察,因此触发器的onChange方法。 比方说,我只需要数据来隐藏/
此外,为什么Viewmodel不能观察到它自己的LiveData的变化?
我是一个新的Android开发人员,我正试图观察ViewModel中的布尔集。当应用程序启动时,我可以观察到它的初始状态,但以后应用的任何更改似乎都不会触发观察者(即当我切换片段时)。 下面是我的ViewModel的代码: 万事如意, 晶圆厂。