як зберегти структуру даних, що відповідає .proto

У мене є програма Android, яка досить проста, вона отримує дані з сервера за допомогою protobuf, а потім дозволяє користувачеві переглядати дерево даних (спрощений)

Тепер я завжди хочу, щоб ці дані були в моїй структурі, тому я використовував відповідь protobuf (через автогенерированный клас) як мій внутрішній набір даних.

Проблема полягає в тому, що я хочу мати можливість оновлювати деякі дані в ньому, а також отримати більше даних від сервера та прикріпити до дерева ... це неможливо через те, що дані є незмінними.

так що моє питання полягає в тому, як я можу, як мінімум обчислювальної потужності, як можна зберігати мої протообальні повідомлення як змінні структури даних?

чи повинен я створювати власну відповідну структуру datlaslass (здається, подвійна робота), чи існує якийсь інший спосіб?

1

2 Відповіді

Підхід, який я використав, - це реалізація моїх типів, які відображають типи протобофу, але які дозволяють виконувати додаткові функції, такі як модифікація на місці, а також реалізувати набір функцій перекладу для перетворення між кожною парою типів. Тоді я використовую лише уроки, створені Protobuf, коли мені дійсно потрібно відправити або отримати щось по дроту.

2
додано
Це просто ганьба, а не тільки подвійне кодування, а й додаткові перетворення об'єктів на процесор.
додано Автор Rickard Liljeberg, джерело
У Android, екземпляри об'єктів покарані з продуктивністю. Це найкращий підхід.
додано Автор Guillermo Tobar, джерело

Ваші протокольні повідомлення є змінними структурами даних. Ви змінюєте їх через інтерфейс Builder , і ви можете зберігати їх за допомогою локального файлообміну Android або BLOB SQLite.

Подивіться на ці приклади:

0
додано
Відповідно до документації у вашій першій посилання "Класи повідомлень, згенеровані буферним компілятором протоколів, є незмінними". Чи можете ви навести вигляд того, як ви використовуєте конструктор, щоб змінити існуючий об'єкт повідомлення (не просто створюючи новий).
додано Автор jon-hanson, джерело
Я не кажу, що це проблема. Я просто думаю, корисно бути очевидним, що ви не модифікуєте оригінальний об'єкт, оскільки він не підтримує ій.
додано Автор jon-hanson, джерело
Так, мені потрібно змінити фактичну структуру, а не тільки отримати об'єкт, який я можу змінити.
додано Автор Rickard Liljeberg, джерело
Тому для очищення вкладені повідомлення. І якщо я змінюю внутрішній об'єкт за допомогою конструктора, зовнішній об'єкт не дозволить мені знову вставити його в список
додано Автор Rickard Liljeberg, джерело
myObject = myObject.toBuilder (). setFoo ("bar"). build (); ... Гадаю, я не розумію, чому "просто створення нового" - це така проблема.
додано Автор Jeff Gilfelt, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників

android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.