Java 新Jetpack数据存储是否仅适用于Kotlin?
我从Jetpack(现在是alpha)上读到了关于新图书馆的信息 从文档中可以清楚地看到,它是一种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数据存储是一种数据存储解决方案,允许您存储
具有协议缓冲区的键值对或类型化对象
数据存储使用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中使用