як захоўваць структуру дадзеных адпаведнасці .proto

У мяне ёсць дадатак для Android, якое даволі проста яна здабывае дадзеныя з сервера, выкарыстоўваючы Protobuf, а затым ён дазваляе карыстальніку праглядаць дрэва дадзеных (спрошчаны)

Цяпер я толькі калі-небудзь хочуць гэтыя дадзеныя ў маёй структуры, так што я выкарыстаў Protobuf адказ (праз автогенерируемый клас) у якасці маіх ўнутранага набору дадзеных.

Праблема ў тым, я хачу, каб мець магчымасць абнаўляць некаторыя дадзеныя ў ім, а таксама атрымаць больш дадзеных з сервера і замацаваць на дрэве ... гэта немагчыма з-за дадзенымі з'яўляюцца беспамылковымі.

так што маё пытанне, як жа я з мінімальнай вылічальнай магутнасцю, як гэта магчыма магазін маіх Protobuf паведамленняў у выглядзе структур дадзеных зменнымі?

do i have to make my own corresponding dataclass-structure (seems like double work) or is there any other way?

1

2 адказы

Падыход я выкарыстаў гэта рэалізаваць мае ўласныя тыпы, якія з'яўляюцца люстранымі тыпамі Protobuf, але якія дазваляюць дадатковыя функцыянальныя магчымасці, такія як у месцы мадыфікацыя, а таксама рэалізаваць набор функцый перакладу для пераўтварэння паміж кожнай парай тыпаў. Я тады толькі выкарыстаць Protobuf згенераваных класаў, калі я на самой справе трэба, каб адправіць ці атрымаць нешта па правадах.

2
дададзена
Гэта проста ганьба, а не толькі падвойнае кадаваньне працы, але і дадатковы працэсар пераўтварэнні магутнасці аб'ектаў.
дададзена аўтар Rickard Liljeberg, крыніца
У АНДРОІД, канкрэтызацыі аб'ектаў парушаюць магутнасці сістэмы. Гэта самы лепшы падыход.
дададзена аўтар Guillermo Tobar, крыніца

Your protobuf messages ARE changeable data structures. You modify them via the Builder interface and you can store them using Android local file storage or SQLite BLOB.

Звярніцеся да гэтых прыкладаў:

0
дададзена
Паводле дакументацыі, у вашай першай спасылцы «Класы паведамленняў, генераваны буфер пратакола кампілятарам усё нязменныя». Ці можаце вы даць exmaple, як вы карыстаецеся Builder для змены існуючага аб'екта паведамленні (без простага стварэння новага).
дададзена аўтар jon-hanson, крыніца
Я не кажу, што гэта пытанне. я проста думаю, што гэта карысна, каб быць ясна, што вы не мадыфікавання зыходнага аб'екта, паколькі ён не падтрымлівае IY.
дададзена аўтар jon-hanson, крыніца
Ды мне трэба змяніць у рэальнай структуры не толькі атрымаць аб'ект, які я магу змяніць.
дададзена аўтар Rickard Liljeberg, крыніца
Так clearify ў мяне ёсць укладзеныя паведамленні. І калі змяніць унутраны аб'ект з забудоўшчыкам, знешні аб'ект звычай дазвольце мне зноў ўставіць яго ў спіс
дададзена аўтар Rickard Liljeberg, крыніца
. <Код> MyObject = myObject.toBuilder() setFoo ( «бар») пабудаваць() ;. ... Я мяркую, што я не разумею, чаму «проста стварыць новы адзін» такое пытанне.
дададзена аўтар Jeff Gilfelt, крыніца