问题标签 [android-architecture-components]
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 - 直接从 ViewModel 调用 webservice
我正在尝试在我的ViewModel
. 我只需要将数据发送到服务器(POST 请求)并在成功与否时获得响应。为了执行 http 请求,我使用 Volley 库。根据 Android 架构指南:
ViewModel 的简单实现可以直接调用 Web 服务来获取数据并将其分配回用户对象。即使它有效,您的应用程序也会随着它的增长而难以维护。
我可以直接从 调用 Web 服务ViewModel
,还是应该使用另一种方法。
android - 使用 Context 实现存储库模块
我想实现Repository
模块来处理数据操作。我在row
目录中有 JSON 文件,并希望创建具体Repository
的实现来从文件中获取数据。我不确定是否可以Context
在Repository
.
例如
android - 从 JobService 观察 LiveData
我有一个存储库,其中包含该LiveData
对象并供两者使用Activity
,现在JobService
(来自 Firebase 调度程序)通过ViewModel
.
这里有简单的答案Service
:Observe LiveData from foreground service
但它没有提到如何为JobService
.
android - 更新数据库时 LiveData 列表不更新
我目前正在重构遗留代码以使用 Android 架构组件,并在一种存储库模式中设置房间数据库和 volley 请求。因此表示层/域层要求存储库获取 LiveData-Objects 以观察或告诉他与服务器同步,之后删除旧的数据库条目并从服务器重新获取所有当前条目。
我已经为同步部分编写了测试,所以我确信对象被正确地提取并插入到数据库中。但是,当编写测试以观察该数据库表的条目时(并测试对象是否正确保存以及在将它们放入数据库之前需要完成的所有操作)时,我正在观察的 LiveData> 不会被触发。
在下面的代码片段中,您可以假设 synchronizeFormsWithServer(...) 方法可以正常工作并且异步执行数据库操作。它包含从数据库中删除所有表单对象的操作,这些表单对象不在从服务器获取的表单列表中,并插入所有新的表单对象。因为在测试开始时数据库是空的,所以这应该没那么重要
未触发观察者的测试:
FormRepository 代码:
数据存储:
formDao 代码(数据库是按照您对房间的期望实现的):
很可能,我对 LiveData-Components 不了解,因为这是我第一次使用它们,所以我可能从根本上搞错了。
非常感谢每一点帮助:)
PS:我偶然发现了这篇文章,它讨论了一个类似的问题,但是由于我目前根本没有使用 DI,而只使用了一个 formrepository 实例(它只有一个 formDao 实例关联)我不认为这是一样的问题。
android - 了解 Maven 中可用的依赖项版本
给定一个 Maven 存储库,我想知道可用的版本是什么。
网址是https://maven.google.com或https://dl.google.com/dl/android/maven2/
具体来说,我想“探索”用于 Android 架构组件的 Maven Google 存储库。我知道如果有新版本可用,Android Studio 有时会警告您,但我想自己探索一下。我试过了
- 通过 web (HTTP / HTTPS) 探索 repo,包括探索 /pom.xml、/.index、/maven-metadata.xml 等子路径(只是猜测)
- 安装了 Eclipse 和 NetBeans,并使用了两个集成的 maven 存储库资源管理器。没有运气,没有给出错误。
- 探索 Google Docs(过时),请参见此处和此处
任何帮助表示赞赏
java - Android 应用架构:在生命周期中实现用户权限
我有一个扩展 LiveData 类的 LocationListener。从 Android 6.0 开始,权限是在运行时请求的。现在,当我尝试实现 LiveData 类时,它需要权限检查onActive()
功能。我必须在每个活动中为请求的权限和收到的结果制作样板代码。 有什么方法可以将此类
onRequestPermissionsResult()
和checkSelfPermission()
功能移动到 LocationListener ?
LocationFragment.java
LastLocationListener.java
android - 架构组件 ViewModel 使用来自 Activity/Fragment 的参数注入 dagger
我正在尝试将新的架构组件添加ViewModel
到我的应用程序中,同时用匕首注入它们。我的代码基于 google在此处显示的内容。我试图避免ViewModelFactory
每种ViewModel
类型都有一个,所以我使用了ViewModelFactory
那个接收Map<Class<? extends ViewModel>, Provider<ViewModel>> creators
。它适用于ViewModels
与@Singleton
范围有依赖关系的情况。但是,我ViewModels
的一个依赖来自片段。这是该片段的模块:
我的ViewModelModule
:
匕首说它不能提供Issue
。这是有道理的,因为Map<Class<? extends ViewModel>, Provider<ViewModel>>
似乎是在编译时创建的。但我只会在该片段的范围内知道参数。我怎样才能做到这一点?
谢谢你。
编辑:
最后,我采用了不同的方法。现在我为每个 ViewModel 创建一个工厂,而不是注入 ViewModel,而是注入工厂。
我创建了这个库:AutoViewModelFactory
自动生成工厂。这是迄今为止我找到的最好的解决方案。
android - 可空性和使用 Kotlin 的 LiveData
我想将 LiveData 与 Kotlin 一起使用,并且具有不应为空的值。你如何处理这个问题?也许是 LiveData 的包装器?在这里寻找好的模式..例如:
我知道访问时 value 不会为 null - 但我总是必须检查 null 或周围有这些丑陋的!!。
android - Android 架构组件 ViewModel 上下文问题
我正在尝试在 Android 中使用新的架构组件,到目前为止效果很好。但是,我偶然发现了一个架构问题。
我有一个MainActivity
托管一堆片段、A
、B
和C
. 直到现在,每次我需要我的 ViewModel (VM) 时,我都会在MainActivity
(像这样:)的上下文中获取它MyViewModel vm = ViewModelProviders.of(getActivity()).get(MyViewModel.class);
。现在考虑一下:
- 片段
C
让用户选择一些值,并将其写入VM
. - Fragment
A
使用FragmentC
让用户选择值,然后A
直接从中读取值VM
并在其 UI 中显示它。 - Fragment
B
使用与 fragment 相同的方法A
。
问题是,由于VM
总是在 的上下文中,如果之前已经使用了MainActivity
片段,则该值仍然可用,并且会显示一些旧数据。A
B
B
我看到的最明显的解决方案是分别VM
在片段A
和上下文中创建B
。但是后来我不知道如何让片段C
访问那些VM
s。
我也可以VM
在片段的上下文中创建C
,但这需要片段A
并B
创建一个实例C
,我认为这不是一个好的解决方案。
第三种解决方案是保留当前方法并VM
在适当的时候清除数据,但我认为这也很混乱。
最好的方法是什么?
android - 使用 ViewModel 在 Fragment 及其父 Activity 之间共享数据
我想问一下在和它ViewModel
之间共享相同的内容是否正确。我有和。我可以使用它来显示用户的详细数据吗?或者是否有更好的方法。Fragment
Activity
UserDetailActivity
UserDetailFragment
ViewModel
UserDetailActivity
UserDetailFragment