好吧,我一直在Kotlin试验原始数据存储,我有一个问题。我正在使用以下内容。原型文件:
syntax = "proto3";
option java_package = "com.example.protodatastore";
option java_multiple_files = true;
message Person{
string name = 1;
int32 age = 2;
message Address{
string street = 3;
int32 number = 4;
}
Address address = 5;
}
这是我的序列化程序类:
class MyPreferencesSerializer: Serializer<Person> {
override fun readFrom(input: InputStream): Person {
try {
return Person.parseFrom(input)
}catch (exception: InvalidProtocolBufferException){
throw CorruptionException("Cannot read proto.", exception)
}
}
override fun writeTo(t: Person, output: OutputStream) {
t.writeTo(output)
}
}
和我的存储库:
class MyPreferencesRepository(context: Context) {
private val dataStore: DataStore<Person> = context.createDataStore(
"my_pref",
serializer = MyPreferencesSerializer()
)
val readProto: Flow<Person> = dataStore.data
.catch { exception ->
// dataStore.data throws an IOException when an error is encountered when reading data
if (exception is IOException) {
Log.e("TAG", exception.message.toString())
emit(Person.getDefaultInstance())
} else {
throw exception
}
}
suspend fun updateValue(name: String){
dataStore.updateData {preferences->
preferences.toBuilder().setName(name).build()
}
}
}
因此,在我的updateValue()方法中,我可以设置“name”字段的名称,但我没有地址消息字段的setter,如street和number。编译器只显示getter。在姓名和年龄字段的另一边,我有setters。如何对这两个地址字段使用setters:街道、编号?
还有一个问题。所以基本上使用Proto DataStore,我们正在序列化/反序列化我们的自定义对象及其所有字段,而不仅仅是字符串、int等单一原始类型?
如何为这两个地址字段使用设置器:街道、号码?
您的代码看起来不错,请尝试清洁
和Rebuild project
,因为proto在编译时生成类
还有一个问题。所以基本上使用Proto DataStore,我们正在序列化/反序列化我们的自定义对象及其所有字段,而不仅仅是字符串、int等单一原始类型?
是的,Proto DataStore非常适合小型或简单的数据集,不支持部分更新或引用完整性。由于它使用序列化/反序列化来写入/读取数据,因此会产生性能问题。
如果要存储大型复杂对象,请使用“房间”。
我观察到的关于原始数据存储的一些令人痛苦的事情:
15/09/16 16:44:39 ERROR Executor:stage 1.0(TID 1)中任务0.0中的异常java.lang.IllegalArgumentException:应重复嵌套类型:required group array{required int32 num;}在org.apache.parquet.schema.conversionPatterns.listWrapper
如何在PySpark中更改嵌套列的datatype?对于rxample,如何将value的数据类型从string更改为int? 参考:如何在pyspark中将Dataframe列从String类型更改为Double类型
本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结
问题内容: 使用redux更新商店中嵌套数据数组的最佳/正确方法是什么? 我的商店看起来像这样: 我有一对异步操作来更新完整的对象,但是我还有另一对操作要更新特定的数组。 我的减速器当前看起来像这样,但是我不确定这是否是正确的方法: 问题答案: React的不变性帮助器是一种创建普通旧JavaScript对象的更新版本而无需对其进行突变的便捷方法。 您为它提供了要更新的源对象和一个对象,该对象描述
问题内容: 所以我的问题是,我在Android(Java)上编写了一个函数,该函数需要两个Double,两个Int和一个Calendar对象。我相信提供的允许它在单独的线程中运行的类AsyncTask仅接受一种类型的Object(但允许多种)作为参数,因此我认为我可以将其放入List或LinkedList或其他内容中。 是否存在允许多个数据类型()的类型,还是我必须创建自己的对象类?我是一个新手程
只使用一个集合很好,但是我需要编辑外部窗体的原型,所以它为每一行呈现内部窗体的原型。 你知道我该怎么做吗?还有什么是最好的储蓄方式 编辑:现在我正在尝试呈现嵌套窗体的原型: 促销特征选择类型 第一级原型,工作很好。