问题标签 [android-jetpack-datastore]
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 - 如何正确抽象类型转换功能?
我有很多看起来像这样的方法:
在那里我从 DataStore 收集某种类型的流,然后如果它是成功结果(带有类型 T 的数据参数),我应该得到它的时间戳(它是一个数据类字段),如果条件为真,则删除无效数据,如果为假,则返回转换后的结果。
转换函数看起来像这样:
我试图以这种方式制作一个抽象方法,但我不完全理解我应该如何将 lambda 传递给它。
用于转换的 lambda 应该看起来像一个扩展方法。
结果类:
android - 使用 Hilt 提供首选项数据存储
我试图提供一个通用DataStore<Preferences>
的,以便可以在多个地方使用相同的首选项文件,但我得到了有用的错误消息:
找不到符号:DaggerMyApplication_HiltComponents_SingletonC.builder()
但是,我可以执行以下操作并在@Inject
构造函数中使用它。
我假设该扩展createDataStore
正在做一些 Hilt 不喜欢的事情,但即使问题无法解决,我也希望能解释正在发生的事情。
android - 使用 ViewModel 的 Jetpack Compose DataStore 错误,“Viewmodel 没有零参数构造函数”
我正在努力在 Android Jetpack Compose 中实现 DataStore 首选项库,以便在我的应用程序中保留一些用户设置。每当我尝试从 Composable 组件访问 SettingsViewModel 时,应用程序就会崩溃并且我收到以下错误:
我正在按照文档创建 DataStore 和视图模型,所以也许我在 Composable 中没有正确使用它们。这是相关的源代码:
摇篮
创建 DataStore 的用户首选项存储库
设置视图模型
设置组件
试图让它与 Compose 一起工作对我来说是一场斗争,我希望得到任何帮助。非常感谢!
android - 在使用数据存储检查保存的首选项时,在移动到另一个活动之前显示活动
我正在使用新的 DataStore 将用户首选项保存在 Android 应用程序中。
我正在尝试为初次使用的用户展示介绍活动。
问题 - 使用数据存储保存首选项后,我检查是否已保存首选项 - 如果是 - 移至下一个活动。问题是 Intro Activity 在移动到下一个活动之前稍微显示,这绝对是一个糟糕的 UI/UX。
当我使用 SharedPreferences 时,这不会发生。
介绍活动
数据管理器
android - Androidx 首选项库与数据存储首选项
按照 Google 在文档中的建议,我之前已将应用程序中的 SharedPreferences 替换为新的 DataStore,以获得一些明显的好处。然后是添加设置屏幕的时候了,我找到了 Preferences Library。当我看到库默认使用 SharedPreferences 而没有切换到 DataStore 的选项时,我感到困惑。您可以使用setPreferenceDataStore
提供自定义存储实现,但 DataStore 没有实现 PreferenceDataStore 接口,由开发人员决定。是的,这个命名也非常令人困惑。当我发现没有关于将 DataStore 与 Preferences Library 一起使用的文章或问题时,我变得更加困惑,所以我觉得我错过了一些东西。人们是否并排使用这两种存储解决方案?还是其中之一?如果我要在 DataStore 中实现 PreferenceDataStore,我应该注意哪些陷阱/陷阱?
android - AndroidX 数据存储 - AES/CBC/PKCS7 - javax.crypto.IllegalBlockSizeException
我阅读了 Mark Allison 的博客文章,其中介绍了将新的Android DataStore与加密与 Android Keystore 的使用相结合。
我正在使用在他的博客中找到的完全相同的 SecretKey 属性(AES/CBC/PKCS7)和加密/解密。
我正在使用以下超级简单的 ProtocolBuffer,只有一个String
字段。
我正在使用以下代码来测试这个实现。
当我尝试对一个简单的序列化和反序列化时,String
它会按预期工作。
但是,当我尝试使用更长的时间String
(注意小于 Proto 的最大尺寸)时。
保存有效,但在终止应用程序并重新启动应用程序以检索它崩溃的值时。
有人知道吗?
它是否特定于字符串的长度以及所选的加密算法?
解密功能错了吗?
提前致谢。
android - 如何将 TestCoroutineScope 与 android 数据存储区一起使用?
我有以下代码:
在测试类时我想检查函数 foo
使用 TestCoroutineScope 很重要,因为它可以确保我完成任何异步内容不幸的是我收到一条错误消息:
kotlinx.coroutines.test.UncompletedCoroutinesError: 测试以活动作业完成: ["coroutine#2":ActorCoroutine{Active}@31b46ea7]
这是有道理的,因为数据存储区可能会使用后台任务,但是我如何使用 android 数据存储区测试类?
我还在谷歌问题跟踪器中问了这个问题: https ://issuetracker.google.com/issues/177856517
与此同时,我支持了一些模拟实现并将其注入构造函数中。
但是我应该能够使用一个使用数据存储的类,而无需将其作为构造函数参数注入
android - 如何观察广播接收器中的流?
我有一个使用共享首选项实现的应用小部件。
现在我正在将其迁移到Data Store。
这里的问题是如何在 AppWidgetProvider(BroadCastReceiver 的子类)中观察/收集流数据?
重现问题的最低代码。
MyAppWidgetProvider:
数据存储工具:
笔记:
- 数据 - 自定义模型类
- loadDataFromPreferences() 返回类型是
Data
使用共享首选项时。将其更改Flow<Data>
为 DataStore,这会导致updateAppWidget()
行中的错误:
val data = loadDataFromPreferences(context, appWidgetId)
- 因为数据类型已更改为 Flow。
android - 由于 Android 中的数据存储迁移,应用升级后应用崩溃
从Play商店升级应用程序后,数据存储崩溃。最近我从共享首选项迁移到数据存储。这仅发生在像素 5 中,而不发生在 android 9 中。
以下是此崩溃的日志。
java - 如何在基于 Java 的 Android 应用程序中实现 Datastore?
我只能找到通过 Kotlin 实现数据存储的方法。我已经尝试使用它来创建它,
DataStore<Preferences> datastore = new Datastore<Preferences>
但是一旦继续它,它就会覆盖到方法,即 save 和 loadData 但传递给它们的参数也在 Kotlin 中。我应该只继续使用 Sharedpreferences 吗?