当前位置:   article > 正文

Android DataStore用法介绍_context.createdatastort

context.createdatastort

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

DataStore提供了两种不同实现方式,Preferences DataStoreProto DataStorePreferences 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"
  • 1
  • 2
  • 3
  • 4
  • 5

2. Preferences DataStore

2.1 创建DataStore

    val dataStore: DataStore<Preferences> = context.createDataStore(
    	name = "user"
    )
  • 1
  • 2
  • 3

2.2 Set操作

    val NAME = preferencesKey<String>("username")    
    dataStore.edit {
    	it[NAME] = name
    }
  • 1
  • 2
  • 3
  • 4

2.3 Get操作

    val getName = dataStore.data
    .map {
    	it[NAME]
    }
  • 1
  • 2
  • 3
  • 4

3. Proto DataStore

3.1 配置proto环境

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

>protoc --version
libprotoc 3.14.0
  • 1
  • 2

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.3 编译Protocol Buffers

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

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

例如:

protoc -I=项目路径\app\src\main\proto\ --java_out=项目路径\app\src\main\ 项目路径\app\src\main\proto\user.proto
  • 1

执行完后,将会在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
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3.5 Set操作

	dataStore.updateData {
        it.toBuilder()
        .setUsername(name)
        .build()
    }
  • 1
  • 2
  • 3
  • 4
  • 5

3.6 Get操作

    val getName = dataStore.data
    .map {
    	it.username
    }
  • 1
  • 2
  • 3
  • 4

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/309329
推荐阅读
相关标签
  

闽ICP备14008679号