Hi All,
I have met some problems about changing the value in my protobuff message.
This is the proto file.
message Info {
  repeated InfoUnit unit = 1;  
}
message InfoUnit {
  optional uint64 id = 1;
  repeated DateUnit date_unit = 2;
}
message DateUnit {
  optional uint64 date = 1;
}

My task is simple. I get an Info message, then update Info's InfoUnit list. 
For example:
1. update the first UnitInfo's first DateUnit's date = 2.
2. add a new UnitInfo to Info with default values.  

At first,
I think I can just get the list and then update it.
Info.Builder builder = infoMessage.toBuilder();
List<InfoUnit> list = builder.getInfoUnitList();
//first infoUnit, first dataUnit, 2
update(list.get(0), 0, 2);
list.add(InfoUnit.newBuilder()...........build())

but finally this does not work.
I find an explain in this website: 
https://github.com/google/protobuf/issues/16
I do not understand and I don't find a good way to solve this problem,

So I change to a new plan, but this is complex.

Info.Builder builder = infoMessage.toBuilder();
//copy the builder list
List<InfoUnit.Builder> builderList = new 
ArrayList<InfoUnit>(builder.getInfoUnitBuilderList());

//finish update and add
update(....);

//clear the InfoUnit list
builder.clearInfouNIT();
//rebuild the list
for(InfoUnit.Builder infoUnitBuilder: builderList)
    builder.addInfoUnit(infoUnitBuilder);
//rebuild this Info
builder.build();


I copy the InfoUnit's builder list to update, then clear the former 
InfoUnit list and use the copy to rebuild the InfoUnit list.
You my find that the DataUnit is also a list, so I do this work again. I 
don't write the DataUnit's update codes here, just use 'update' to replace 
briefly.

Of course this worked. But I believe there must be a better way to update 
the value of repeat type in message.
If someone has good ideas or has some questions about my situation, leave 
message to me.
Expect anyone's reply :)

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to