Proto DataStore-----JAVA

为了编译proto文件,引入protobuf插件

1、项目build.gradle加入

dependencies { classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18' }

2、模块buid.gradle加入

apply plugin: 'com.google.protobuf'
 
protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.11.0"
    }
 
    // Generates the java Protobuf-lite code for the Protobufs in this project. See
    // https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation
    // for more information.
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option 'lite'
                }
            }
        }
    }
}
 
dependencies {
    implementation  "com.google.protobuf:protobuf-javalite:3.11.0"
}

3、编辑proto文件

proto语法Language Guide (proto3)  |  Protocol Buffers  |  Google Developers

路径必须为app/src/main/proto

setting.proto文件

syntax = "proto3";

option java_package = "com.demo.test.data";
option java_multiple_files = true;

message YuanxzhSetting {
  int32 age = 1;
  bool  isMale = 2;
  string name = 3;
}

1、2、3代表的是第几个字段

现在重新编译就可以生成YuanxzhSetting类了

4、

private static class SettingSerializer implements Serializer<YuanxzhSetting> {
    @Override
    public YuanxzhSetting getDefaultValue() {
        return YuanxzhSetting.getDefaultInstance();
    }


    @Nullable
    @Override
    public YuanxzhSetting readFrom(@NonNull InputStream inputStream, @NonNull Continuation<? super YuanxzhSetting> continuation) {
        try {
            return YuanxzhSetting.parseFrom(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Nullable
    @Override
    public Object writeTo(YuanxzhSetting yuanxzhSetting, @NonNull OutputStream outputStream, @NonNull Continuation<? super Unit> continuation) {
        try {
            yuanxzhSetting.writeTo(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

5、

RxDataStore<YuanxzhSetting> dataStore;
dataStore = new RxDataStoreBuilder<YuanxzhSetting>(BaseApplication.getContext(),
        /* fileName= */ "settings.proto",
        new SettingSerializer()).build();

设置
Single<YuanxzhSetting> updateResult =
        dataStore.updateDataAsync(currentSettings ->
                Single.just(
                        currentSettings.toBuilder()
                                .setAge(35)
                                .setName("yuanxzh")
                                .setIsMale(true)
                                .build()));     
获取
Flowable<Integer> exampleCounterFlow =
        dataStore.data().map(settings -> settings.getAge());
exampleCounterFlow.blockingFirst()    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值