问题标签 [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.

0 投票
1 回答
45 浏览

android - 如何正确抽象类型转换功能?

我有很多看起来像这样的方法:

在那里我从 DataStore 收集某种类型的流,然后如果它是成功结果(带有类型 T 的数据参数),我应该得到它的时间戳(它是一个数据类字段),如果条件为真,则删除无效数据,如果为假,则返回转换后的结果。

转换函数看起来像这样:

我试图以这种方式制作一个抽象方法,但我不完全理解我应该如何将 lambda 传递给它。

用于转换的 lambda 应该看起来像一个扩展方法。

结果类:

0 投票
3 回答
4114 浏览

android - 使用 Hilt 提供首选项数据存储

我试图提供一个通用DataStore<Preferences>的,以便可以在多个地方使用相同的首选项文件,但我得到了有用的错误消息:

找不到符号:DaggerMyApplication_HiltComponents_SingletonC.builder()

但是,我可以执行以下操作并在@Inject构造函数中使用它。

我假设该扩展createDataStore正在做一些 Hilt 不喜欢的事情,但即使问题无法解决,我也希望能解释正在发生的事情。

0 投票
1 回答
1525 浏览

android - 使用 ViewModel 的 Jetpack Compose DataStore 错误,“Viewmodel 没有零参数构造函数”

我正在努力在 Android Jetpack Compose 中实现 DataStore 首选项库,以便在我的应用程序中保留一些用户设置。每当我尝试从 Composable 组件访问 SettingsViewModel 时,应用程序就会崩溃并且我收到以下错误:

我正在按照文档创建 DataStore 和视图模型,所以也许我在 Composable 中没有正确使用它们。这是相关的源代码:

摇篮

创建 DataStore 的用户首选项存储库

设置视图模型

设置组件

试图让它与 Compose 一起工作对我来说是一场斗争,我希望得到任何帮助。非常感谢!

0 投票
0 回答
122 浏览

android - 在使用数据存储检查保存的首选项时,在移动到另一个活动之前显示活动

我正在使用新的 DataStore 将用户首选项保存在 Android 应用程序中。

我正在尝试为初次使用的用户展示介绍活动。

问题 - 使用数据存储保存首选项后,我检查是否已保存首选项 - 如果是 - 移至下一个活动。问题是 Intro Activity 在移动到下一个活动之前稍微显示,这绝对是一个糟糕的 UI/UX。

当我使用 SharedPreferences 时,这不会发生。

介绍活动

数据管理器

0 投票
3 回答
1524 浏览

android - Androidx 首选项库与数据存储首选项

按照 Google 在文档中的建议,我之前已将应用程序中的 SharedPreferences 替换为新的 DataStore,以获得一些明显的好处。然后是添加设置屏幕的时候了,我找到了 Preferences Library。当我看到库默认使用 SharedPreferences 而没有切换到 DataStore 的选项时,我感到困惑。您可以使用setPreferenceDataStore提供自定义存储实现,但 DataStore 没有实现 PreferenceDataStore 接口,由开发人员决定。是的,这个命名也非常令人困惑。当我发现没有关于将 DataStore 与 Preferences Library 一起使用的文章或问题时,我变得更加困惑,所以我觉得我错过了一些东西。人们是否并排使用这两种存储解决方案?还是其中之一?如果我要在 DataStore 中实现 PreferenceDataStore,我应该注意哪些陷阱/陷阱?

0 投票
1 回答
392 浏览

android - AndroidX 数据存储 - AES/CBC/PKCS7 - javax.crypto.IllegalBlockSizeException

我阅读了 Mark Allison 的博客文章,其中介绍了将新的Android DataStore与加密与 Android Keystore 的使用相结合。

我正在使用在他的博客中找到的完全相同的 SecretKey 属性(AES/CBC/PKCS7)和加密/解密。

我正在使用以下超级简单的 ProtocolBuffer,只有一个String字段。

我正在使用以下代码来测试这个实现。

当我尝试对一个简单的序列化和反序列化时,String它会按预期工作。

但是,当我尝试使用更长的时间String(注意小于 Proto 的最大尺寸)时。
保存有效,但在终止应用程序并重新启动应用程序以检索它崩溃的值时。

有人知道吗?
它是否特定于字符串的长度以及所选的加密算法?
解密功能错了吗?

提前致谢。

0 投票
1 回答
1052 浏览

android - 如何将 TestCoroutineScope 与 android 数据存储区一起使用?

我有以下代码:

在测试类时我想检查函数 foo

使用 TestCoroutineScope 很重要,因为它可以确保我完成任何异步内容不幸的是我收到一条错误消息:

kotlinx.coroutines.test.UncompletedCoroutinesError: 测试以活动作业完成: ["coroutine#2":ActorCoroutine{Active}@31b46ea7]

这是有道理的,因为数据存储区可能会使用后台任务,但是我如何使用 android 数据存储区测试类?

我还在谷歌问题跟踪器中问了这个问题: https ://issuetracker.google.com/issues/177856517

与此同时,我支持了一些模拟实现并将其注入构造函数中。

但是我应该能够使用一个使用数据存储的类,而无需将其作为构造函数参数注入

0 投票
2 回答
354 浏览

android - 如何观察广播接收器中的流?

我有一个使用共享首选项实现的应用小部件。
现在我正在将其迁移到Data Store

这里的问题是如何在 AppWidgetProvider(BroadCastReceiver 的子类)中观察/收集流数据?

重现问题的最低代码。

MyAppWidgetProvider:

数据存储工具:

笔记:

  1. 数据 - 自定义模型类
  2. loadDataFromPreferences() 返回类型是Data使用共享首选项时。将其更改Flow<Data>为 DataStore,这会导致updateAppWidget()行中的错误:
    val data = loadDataFromPreferences(context, appWidgetId)- 因为数据类型已更改为 Flow。
0 投票
1 回答
885 浏览

android - 由于 Android 中的数据存储迁移,应用升级后应用崩溃

从Play商店升级应用程序后,数据存储崩溃。最近我从共享首选项迁移到数据存储。这仅发生在像素 5 中,而不发生在 android 9 中。

以下是此崩溃的日志。

0 投票
1 回答
1251 浏览

java - 如何在基于 Java 的 Android 应用程序中实现 Datastore?

我只能找到通过 Kotlin 实现数据存储的方法。我已经尝试使用它来创建它, DataStore<Preferences> datastore = new Datastore<Preferences>但是一旦继续它,它就会覆盖到方法,即 save 和 loadData 但传递给它们的参数也在 Kotlin 中。我应该只继续使用 Sharedpreferences 吗?