Как сохранить данные, которые никогда не изменятся?

У меня есть некоторые данные, которые не изменятся. Эти данные представляют собой вложенные названия меню для экрана входа приложения.

Я попытался сохранить данные с помощью Android Room, но это оказалось ненужным. Даже если бы это было успешно, в этом не было бы необходимости, поскольку данные не изменятся.

Затем я попытался сохранить данные, используя массив строковых ресурсов. Выглядело неплохо, но мне нужны были вложенные массивы, и по этой причине этот вариант не подходил.

Итак, в этом случае, как лучше всего сохранить эти постоянные данные?

0
0
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Простое решение — это Kotlin object:

object Whatever {
   val yourOuterMenu = listOf(
     listOf(...),
     listOf(...),
     listOf(...)
   )
   // etc.
}

Альтернативно вы можете сохранить файл JSON или XML в качестве ресурса в src/main/assets/ и прочитать его с помощью AssetManager. ИМХО, это добавляет ценности только в том случае, если файл нужно поддерживать непрограммисту, или вы сгенерируете его с помощью какого-либо инструмента.

Хорошей ли практикой является сохранение этих названий меню и названий подменю в качестве членов класса? Мне нужно будет передать его идентификатор навигационному контроллеру при нажатии на подменю. Я также попробовал listOf( Pair(MENU,listOf(SUBMENU), ...), подходит ли этот подход вашему сценарию?

striver 05.09.2024 21:22

@striver: «Хороша ли практика сохранять эти имена меню и названия подменю в качестве членов класса?» - это будет зависеть от широкого спектра соображений, которые выходят далеко за рамки этого вопроса. Например, если вы собираетесь поддерживать несколько языков, вам нужно сначала решить, как вы хотите это сделать (строчные ресурсы Android? Многоплатформенные строковые ресурсы Kotlin? что-то еще?). Только тогда вы сможете решить, насколько подход object будет соответствовать вашим многоязычным планам. «Соответствует ли этот подход вашему сценарию?» -- все в порядке, я пытался ответить на ваш вопрос.

CommonsWare 05.09.2024 21:34

Вы можете сохранить его в файле JSON, а затем использовать этот файл JSON внутри приложения для сериализации данных JSON. Рекомендуется Json, поскольку гораздо проще писать для сложной структуры данных, как вы упомянули. Если вам нужно что-то нативное, вы можете выбрать класс объектов Kotlin и создать объект Array или Array of Object, все, что вам кажется подходящим.

Android-студия предоставляет возможность работы с XML-файлами. Пример файла:

<parent_element>
    <element1>
        <nested_element_1>Some data</nested_element_1>
        <nested_element_2>Some other data</nested_element_2>
    </element1>
    <element2>
        <nested_element_3>Some data</nested_element_3>
        <nested_element_4>Some other data</nested_element_4>
    </element2>
</parent_element>

Другие вопросы по теме

Как сделать копию класса данных только с инициализированными свойствами, чтобы избежать StackOverflowError?
Gradle не загружает определенную зависимость
Понимание идеи и вариантов использования suspendCoroutine
Сериализатор для класса xxx не найден. Убедитесь, что класс помечен как «@Serializable» и что установлен плагин компилятора сериализации
Android: разрешения во время выполнения не работают — в настройках приложения не отображаются запрошенные разрешения, даже когда их запрашивают (WRITE_EXTERNAL_STORAGE)
Расшифровка зашифрованных данных Dart AES в Kotlin приводит к исключению BadPaddingException
Как получить доступ к частному свойству верхнего уровня Kotlin в безымянном (основном) файле?
Как читать и декодировать удаленные данные JSON в приложении Jetpack Compose?
Kotlin получает значение перечисления по его общему типу, если это перечисление
Десериализация JSON не работает в Jetpack Compose

Похожие вопросы