Java 新Jetpack数据存储是否仅适用于Kotlin?

Java 新Jetpack数据存储是否仅适用于Kotlin?,java,android,kotlin,android-jetpack,android-jetpack-datastore,Java,Android,Kotlin,Android Jetpack,Android Jetpack Datastore,我从Jetpack(现在是alpha)上读到了关于新图书馆的信息 从文档中可以清楚地看到,它是一种共享首选项的杀手 Jetpack数据存储是一种数据存储解决方案,允许您存储 具有协议缓冲区的键值对或类型化对象 数据存储使用Kotlin协程和流来存储数据 异步、一致和事务性地 如果当前使用SysPoad存储数据,请考虑 改为迁移到数据存储 如果我没有遗漏任何东西,你就不能在Java中使用这个库。我说得对吗?就我个人而言,我使用Kotlin,但就我而言,这是AndroidX库的一个特殊先例。我很确定

我从Jetpack(现在是alpha)上读到了关于新图书馆的信息

从文档中可以清楚地看到,它是一种
共享首选项的杀手

Jetpack数据存储是一种数据存储解决方案,允许您存储 具有协议缓冲区的键值对或类型化对象

数据存储使用Kotlin协程和流来存储数据 异步、一致和事务性地

如果当前使用SysPoad存储数据,请考虑 改为迁移到数据存储


如果我没有遗漏任何东西,你就不能在Java中使用这个库。我说得对吗?就我个人而言,我使用Kotlin,但就我而言,这是AndroidX库的一个特殊先例。

我很确定他们没有计划为java使用它

基于Kotlin协程和流构建的数据存储提供了两种不同的实现:Proto DataStore,用于存储类型化对象(由协议缓冲区支持)和Preferences DataStore,用于存储键值对。数据以异步、一致和事务方式存储,克服了SharedReference的大多数缺点

就我而言,Kotlin协程/流对java不可用。 你可以阅读更多,弗洛里纳的一篇好文章。

你说得对,通过共享参考

从技术上讲,您可以像往常一样通过在
gradle.build
中添加依赖项在Java中添加它。但不幸的是,您不能使用它,因为API公开了suspend函数。因此,您仍然需要添加Kotlin支持


它仍然是alpha版本,所以他们可能会添加Java支持。他们只需要公开Java的同级方法,它返回类似于承诺的东西

他被释放了。添加了对RXJava2/3的支持,因此现在可以在Java中使用数据存储

为数据存储添加了RxJava包装器。datastore-rxjava2/3工件 包含核心数据存储API(RxDataStore, RxDataStoreBuilder和RxDataMigration)。这个 datastore-preferences-rxjava2/3工件包含用于 构造一个首选项数据存储

为此,应添加依赖项:

// optional - RxJava2 support
implementation "androidx.datastore:datastore-rxjava2:1.0.0-alpha06"

// optional - RxJava3 support
implementation "androidx.datastore:datastore-rxjava3:1.0.0-alpha06"
此外,现在还保存了Java代码示例的等价物。

您只能在RxJava中使用。在纯java中,您只能现在使用。让我们将RxJava数据存储首选项与共享数据引用

1)访问

数据存储:

RxDataStore<Preferences> dataStore =
  new RxPreferenceDataStoreBuilder(context, /*name=*/ "settings").build();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
2)阅读:

RxDataStore<Preferences> dataStore =
  new RxPreferenceDataStoreBuilder(context, /*name=*/ "settings").build();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
数据存储: 为您的值定义一个键(例如int value),然后访问数据存储的数据:

data()
-访问数据存储的数据。此属性返回一个流

map()
-返回一个值,其中包含将给定函数应用于原始流的每个值的结果

共享参考资料

要从共享首选项文件中检索值,请使用默认值(示例中为o)提供所需值的键

3)写入

数据存储:

RxDataStore<Preferences> dataStore =
  new RxPreferenceDataStoreBuilder(context, /*name=*/ "settings").build();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

以事务方式更新数据存储中的数据

SharedReferences:

RxDataStore<Preferences> dataStore =
  new RxPreferenceDataStoreBuilder(context, /*name=*/ "settings").build();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);
使用SharedReferences.Editor传递要使用putInt()和putString()等方法写入的键和值。然后调用apply()或commit()保存更改


结论:开发人员.ANDROID.com建议考虑迁移到DATASTORE而不是SyrdPoopy。但是,虽然Java不支持数据存储,但最好使用SharedReference。如果您的应用程序使用Kotlin或RxJava—最好使用数据存储

我可以使用纯Java中的数据存储吗?或者只在RxJava中使用-applications@VictorPozdnyakov,现在你只有两个选择——Kotlin协同程序和RxJava。虽然库仍在alpha中,但可能会有一些变化(谁知道呢,可能会很快添加对Guava的
ListenableFuture
的支持)是的。在普通java项目中,现在仍然需要我们使用SharedReference。希望数据存储将来可以在纯java中使用