Как лучше организовать хранение данных?

Ответить
Аватара пользователя
kondra007
Сообщения: 91
Зарегистрирован: 23 янв 2013, 14:49

Как лучше организовать хранение данных?

Сообщение kondra007 » 09 янв 2014, 21:37

Здравствуйте, я начинающий разработчик, опыт в Java есть небольшой. Возникло желание написать определенную программу под Андроид.
Что она делает: Выбирается человек из спиннера и в следующем активити показывается его Имя, Возраст, День и Месяц рождения.
Данные берутся из текстового файла, который парсится так: 01302002 = Человек с номером 01 (они все закодированы), возраст 30 лет, родился 20.02 (20 февраля).

В спиннере выбор - Иванов, Петров, Сидоров...
Выбираем Иванова, его код 01. Потом парсится файл на наличие первых двух символов 0 и 1 и формируется ListView.

Соответственно, надо обеспечить получение фамилии по номеру и номера по фамилии, и чтобы всё это хранилось централизованно.

На ум приходит только Map (типа ArrayMap).
Вопросы: 1) Можно ли потом поле Значений из ArrayMap "скормить" спиннеру, чтоб его образовать? 2) Нормально ли будет осуществляться поиск по ArrayMap?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Как лучше организовать хранение данных?

Сообщение Foenix » 09 янв 2014, 21:47

а вы что, хотите как-то этот мэп принципиально хранить в текстовых файлах и парсить?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Как лучше организовать хранение данных?

Сообщение altwin » 10 янв 2014, 00:31

kondra007 писал(а):Здравствуйте, я начинающий разработчик, опыт в Java есть небольшой. Возникло желание написать определенную программу под Андроид.
Что она делает: Выбирается человек из спиннера и в следующем активити показывается его Имя, Возраст, День и Месяц рождения.
Данные берутся из текстового файла, который парсится так: 01302002 = Человек с номером 01 (они все закодированы), возраст 30 лет, родился 20.02 (20 февраля).

В спиннере выбор - Иванов, Петров, Сидоров...
Выбираем Иванова, его код 01. Потом парсится файл на наличие первых двух символов 0 и 1 и формируется ListView.

Соответственно, надо обеспечить получение фамилии по номеру и номера по фамилии, и чтобы всё это хранилось централизованно.

На ум приходит только Map (типа ArrayMap).
Вопросы: 1) Можно ли потом поле Значений из ArrayMap "скормить" спиннеру, чтоб его образовать? 2) Нормально ли будет осуществляться поиск по ArrayMap?
1. Сомневаюсь, что это будет сильно сложнее этого: Android Spinner with Hashmap
2. ArrayMap, по сути это хеш таблица, соответственно поиск будет очень быстрым. Вы вполне можете использовать индекс(01302002), как ключ - это вполне стандартное решение. Значение же - объект с остальными полями.

P.S. понятно, что все это зависит от формата входящих данных(к примеру выхода нет, если получать их из 1с), но реляционная база тут сильно упростила бы жизнь.
Изображение

Аватара пользователя
kondra007
Сообщения: 91
Зарегистрирован: 23 янв 2013, 14:49

Re: Как лучше организовать хранение данных?

Сообщение kondra007 » 10 янв 2014, 02:06

Хм..интересно, но я нашел ещё хорошее решение: https://code.google.com/p/guava-libraries/
Библиотека Guava, в ней есть замечательная коллекция - BiMap - двусторонняя мапа. Если надо по значению искать ключ, то просто добавляем метод inverse()
И ещё там нашлась отличная её разновидность ImmutableBiMap - не изменяющаяся во времени мапа. То есть, она даже сохраняет порядок введенных значений.

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: Как лучше организовать хранение данных?

Сообщение adarash » 10 янв 2014, 10:11

ОФФТОП!!! Почему овца?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Как лучше организовать хранение данных?

Сообщение Mikhail_dev » 10 янв 2014, 11:35

kondra007 писал(а):Хм..интересно, но я нашел ещё хорошее решение: https://code.google.com/p/guava-libraries/
Библиотека Guava, в ней есть замечательная коллекция - BiMap - двусторонняя мапа. Если надо по значению искать ключ, то просто добавляем метод inverse()
И ещё там нашлась отличная её разновидность ImmutableBiMap - не изменяющаяся во времени мапа. То есть, она даже сохраняет порядок введенных значений.
LinkedHashMap тоже сохраняет порядок входящих данных. Может стоит использовать стандартные коллекции, которых предостаточно?

Аватара пользователя
kondra007
Сообщения: 91
Зарегистрирован: 23 янв 2013, 14:49

Re: Как лучше организовать хранение данных?

Сообщение kondra007 » 10 янв 2014, 13:13

adarash, оффтоп-ответ: потому на на форуме Mozilla Firefox давно ещё требовались аватарки очень маленькие и овца - первая картинка нужного размера, что мне попалась.
(как ещё вариант: я очень хреновый программист :D )

m090050 - сомневаюсь, что в LinkedHashMap можно искать ключи по значениям =)

Ответить