首页 > 编程知识 正文

茶具用法介绍,各类化妆品的用法介绍

时间:2023-05-05 18:22:03 阅读:234355 作者:335

DataStore是Android Jetpack中的一个组件,它是一个数据存储的解决方案,跟SharedPreferences一样,采用key-value形式存储。DataStore支持Kotlin协程和Flow操作,如果当前使用SharedPreferences,可以考虑迁移到DataStore。Jetpack DataStore 是经过改进的新版数据存储解决方案,旨在取代 SharedPreferences,让应用能够以异步、事务方式存储数据。跟SharedPreferences一样,它比较适合小数据和简单操作,如果不是,应该使用数据库存储。

DataStore提供了两种不同实现方式,Preferences DataStore和Proto DataStore。Preferences DataStore不需要预先定义,但是不支持类型安全。Proto DataStore需要预先使用protocol buffers定义数据,但是类型安全。下面有三者之间的比较,该图片作者Florina Muntenescu。


下面开始介绍DataStore的基本用法

1. 导入依赖 // Preferences DataStore implementation "androidx.datastore:datastore-preferences:1.0.0-alpha04" // Proto DataStore implementation "androidx.datastore:datastore-core:1.0.0-alpha04" implementation "com.google.protobuf:protobuf-java:3.14.0" 2. Preferences DataStore 2.1 创建DataStore val dataStore: DataStore<Preferences> = context.createDataStore( name = "user" ) 2.2 Set操作 val NAME = preferencesKey<String>("username") dataStore.edit { it[NAME] = name } 2.3 Get操作 val getName = dataStore.data .map { it[NAME] } 3. Proto DataStore 3.1 配置proto环境

Protocol Buffers v3.14.0的下载地址,以windows 64位环境为例,选择protoc-3.14.0-win64.zip下载。下载完成后解压,将protoc-3.14.0-win64bin的绝对路径添加到系统环境变量中。如果添加到系统环境变量中,可以点此网址:WINDOWS如何配置Path环境变量。打开命令行工具,输入protoc --version查看版本成功,则表示配置成功。

>protoc --versionlibprotoc 3.14.0 3.2 新建.proto文件

在项目的app/src/main/proto/路径下新建user.proto文件,第一行一定要写上syntax,选择proto版本,不能是空白行。

syntax = "proto3";option java_package = "com.hs.datastoresample.data.bean.user";option java_multiple_files = true;message User{ string username = 1;} 3.3 编译Protocol Buffers

打开命令行工具,输入格式如下

protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto

例如:

protoc -I=项目路径appsrcmainproto --java_out=项目路径appsrcmain 项目路径appsrcmainprotouser.proto

执行完后,将会在java目录com.hs.datastoresample.data.bean.user包下自动生成三个文件。

3.4 创建DataStore object UserSerializer: Serializer<User> { override val defaultValue: User get() = User.getDefaultInstance() override fun readFrom(input: InputStream): User { try { return User.parseFrom(input) }catch (e: InvalidProtocolBufferException){ throw CorruptionException("Cannot read proto.", e) } } override fun writeTo(t: User, output: OutputStream) { t.writeTo(output) } } val dataStore = context.createDataStore( fileName = FILENAME, serializer = UserSerializer ) 3.5 Set操作 dataStore.updateData { it.toBuilder() .setUsername(name) .build() } 3.6 Get操作 val getName = dataStore.data .map { it.username }

最后附上完整代码的Github地址:DataStoreSample,如果觉得不错的话,欢迎Star。

如何使用CSS设置div半透明的效果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。