android - Android DataStore:从 Java 调用 Context.createDataStore
问题描述
我正在尝试用 Java 实现新的类型化 DataStore API,但遇到了一些问题。所有文档似乎都只在 Kotlin 中,并且尝试创建新的数据存储并不像 Java 方面那样直接。
从 Java调用DataStoreFactoryKt.createDataStore()
需要我提供所有参数,包括 Kotlin 实现中具有默认值的参数。该功能似乎没有任何@JvmOverloads
注释,导致我的困境。
fun <T> Context.createDataStore(
fileName: String,
serializer: Serializer<T>,
corruptionHandler: ReplaceFileCorruptionHandler<T>? = null,
migrations: List<DataMigration<T>> = listOf(),
scope: CoroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
): DataStore<T> =
DataStoreFactory.create(
produceFile = { File(this.filesDir, "datastore/$fileName") },
serializer = serializer,
corruptionHandler = corruptionHandler,
migrations = migrations,
scope = scope
)
如果有的话,有什么更好的方法来解决这个问题?或者 Data Store api 是否简单设计为仅与 Kotlin 一起使用?我不知道如何CoroutineScope
从 Java 中提供一个论点。
解决方案
在将 dataStore 依赖项更新为“1.0.0-alpha08”后,如下所示。
// DataStore
implementation "androidx.datastore:datastore-preferences:1.0.0-alpha08"
您可以有如下偏好实现:
private val Context.dataStore by preferencesDataStore("app_preferences")
之后,如果您喜欢创建一些首选项键:
private object Keys {
val HIDE_VISITED = booleanPreferencesKey("hide_visited")
}
其他选项可以是字符串PreferencesKey、int PreferencesKey 等。
保存值示例:
context.dataStore.edit { prefs -> prefs[Keys.HIDE_VISITED] = hideVisited }
读取保存值示例:
val hideVisited = preferences[Keys.HIDE_VISITED] ?: false
推荐阅读
- c++ - 如果它立即退出而没有错误消息,如何调试?
- python - 如何获得绘图中两条线的交点?
- laravel - 修改 Laravel Passport 令牌过期检查 (JWT)
- trino - 将节点添加到 Trino 集群
- reactjs - MUI 选择自定义 MenuItem 无法正常工作
- javascript - 无法在点击事件中插入函数
- java - “String.substring(int,int)行:不可用”导致错误
- mysql - mysql如果中间出现错误则回滚整个过程
- c# - C# XElement 如何按特定顺序添加不同的属性?
- google-sheets - 将 googlesheet 与 google 日历同步