问题标签 [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 投票
5 回答
1235 浏览

android - Android:如何只创建一个 DatabaseRepository.kt 实例并在不同的活动中使用它?

EDIT: I NEED TO PASS A CONTEXT AS A PARAMETER TO THE CLASS

DataStorerepository是同一个班,不要混淆)

我有两个活动,AB一个repository。ActivityA打开 Activity B, ActivityB将数据保存在repositoryDataStoreandroid jetpack 的一部分)中。

LiveData在这两个活动中都使用来观察DataStore.

DataStorefrom 活动B中更新新值后,活动LiveData中的B将按预期获取新的更新值。但是当我返回活动时ALiveData会获取旧数据(期待新的更新数据)。

我意识到它正在发生,因为我repository在这两个活动中都创建了两个实例。

我怎样才能只创建一个repository类的实例并在两个活动中使用它?如果有更好的方法来做到这一点,那么该解决方案也受到欢迎。

0 投票
1 回答
268 浏览

kotlin - Android:如何在不同进程中运行的活动和服务之间进行通信?

我从一个service不同的地方开始。设计为即使在应用程序关闭时也能运行。从 开始后,我关闭了应用程序。现在,当我重新打开应用程序时,可能会或可能不会运行。但我还没有找到方法来知道它是否正在运行。我怎样才能做到这一点?processactivityserviceserviceactivityserviceservice

仅供参考:我已经在这里检查了所有相关的答案,但是当服务在不同的进程中运行时,它们都不起作用。这是我得到的最接近的答案链接。但是这个答案似乎有缺陷,我也想听听您对此的看法。

这是我目前正在做的事情:

AndroidManifest.xml

MainApplication.kt(目的:只有一个 SettingsRepository 类的实例)

SettingsRepository.kt(目的:将服务的运行状态保存在 Preference DataStore 中)

Service.kt

Activity.kt

ViewModel.kt

0 投票
1 回答
2885 浏览

android - 如何在视图模型中从 DataStore 首选项中获取值,如 Flow

我有一种情况可以通过 SharedPreferences 解决。但现在我正在迁移到 kotlin 和 DataStore。

我遇到了这个问题。

我有一个字符串值存储在共享首选项中,以及其他键值对。此 String 是一个 URL,在 Retrofit 调用的 baseUrl 参数中使用。

我的问题是,当我在 ViewModel 中运行 Fragment 时,检索值的正确方法是什么。

这是我的代码的一部分:

然后在 ViewModel 类中

但这似乎很复杂,对于一个简单的任务......

我错过了什么?我真的迷路了。

此致

0 投票
2 回答
3054 浏览

android - Android的Jetpack DataStore(alpha07版本)的正确实例创建

因此,在新的 alpha07 版本中,Android 放弃了private val dataStore = context.createDataStore(name = "settings_pref").,但是他们使用数据存储的新方式对我不起作用。

由于从“androidx.datastore:datastore-core:1.0.0-alpha06”升级到 alpha07,我似乎无法在没有红色代码的情况下使我的数据存储语法工作(当我添加 context.dataStore.edit 时出现错误)。同样降级回 alpha06,以前工作的代码现在不再工作(使用 createDataStore)。

我正在使用的是他们在主页上的示例,但是除了这个之外,他们还没有更新他们的示例。

如果有人知道问题(或我的错误),我将不胜感激。

0 投票
2 回答
2077 浏览

android - 使用 Datastore 防止内存泄漏的最佳做法是什么?

我尝试使用数据存储首选项 alpha07 存储和获取数据,一切正常,我在数据存储中遇到了一些内存泄漏问题

使用 Datastore 防止内存泄漏的最佳做法是什么?

这是我的示例代码:

用户管理器.kt

用户.kt

SignInFragment.kt

HomeFragment.kt

内存泄漏问题: 在此处输入图像描述

在此处输入图像描述

我尝试了以下解决方案不起作用 ,即使尝试了此解决方案,我仍然会泄漏,在这种情况下,观察者应该与组件的生命周期绑定 Fragment 的生命周期。改用 viewLifeCycleOwner 来绑定观察者。

HomeFragment.kt

参考截图(再次复制) 在此处输入图像描述

0 投票
4 回答
4077 浏览

android - 如何将 Android DataStore 与多用户或文件一起使用

我想使用 DataStore 存储一些首选项。但问题是我的应用程序可以有多个用户,因此需要将这些首选项存储在单独的文件中。我得到了一个仅使用一个用户的工作示例,但我正在努力支持多个用户。

这是我的代码示例:

我正在使用Koin,我尝试卸载DataStorageRepository注销并在登录时重新创建它,但 DataStore 似乎一直存在,直到应用程序被杀死并且我得到以下崩溃:

java.lang.IllegalStateException:同一个文件有多个处于活动状态的 DataStore:[...] 您应该将 DataStore 保持为单例,或者确认同一个文件上没有两个处于活动状态的 DataStore(通过确认范围是取消)。

我还尝试CoroutineScope在注销时使用并杀死它,但是在登录时重新创建范围后,DataStore 似乎没有重新创建。

DataStore 是否支持关闭连接或处理多个文件的方法?

0 投票
1 回答
342 浏览

android - 如何删除 Jetpack DataStore 创建的首选项文件

我有一个多用户应用程序并使用 DataStore 为每个用户创建一个首选项文件。一旦用户取消注册,我希望能够删除由 DataStore 创建的文件。我发现了这个问题,但它只清除了文件中的首选项。由于应用程序可能有多个用户,最好删除整个文件。如何才能做到这一点?

0 投票
1 回答
403 浏览

android - 如何收听 ViewModel 中的 DataStore 更改?

所以我正在制作一个应用程序,如果用户选择不同的位置,api的查询也应该立即改变并且应该返回新数据?

如何在视图模型中实现流观察器?

0 投票
1 回答
2524 浏览

android - 安卓 | 科特林 | 流 - 不能转换为 kotlinx.coroutines.flow.StateFlow

我正在努力让自己熟悉DataStore,所以在我当前的项目中,我正在尝试使用它。

在我的依赖中。我已经添加 :

然后我创建了这个类来处理数据存储:

在我的视图模型中,我正在尝试使用该值,如下所示:

但它给了我以下错误:

在 xml 中,在 UI 部分:

使用 viewmodel,一切都变得如此酷炫和简单,易于阅读和实现。现在我对Flow感到困惑。谢谢。

0 投票
0 回答
121 浏览

android - 当您的 android 应用程序中有 300 多个首选项时,从共享首选项迁移到 Jetpack Proto 数据存储?

Shared Preferences 在我的应用程序中被大量使用,它们包含 300 多种可能的数据类型,例如 int、boolean、String 等。

现在我想迁移到 Jetpack Proto Data 存储中,我尝试过的所有教程都将所有首选项定义到 .proto 文件中,然后从 Data Store 中检索数据并提供类的 FLOW 对象,其中定义了所有可能的首选项.

我在 proto 中定义的类结构用于创建 Serializer 以及检索值的 Flow 对象,所以我的问题是,

我是否需要先将所有 300 多个首选项定义到一个文件中然后使用它们(这将需要我在使用共享首选项的每个地方写入大量代码)或者有没有更好的迁移方式?