Android: хранение неизменной ссылки на изображения в базе данных - PullRequest
1 голос
/ 01 марта 2011

коллег-программистов!Я новичок ... надеюсь, вы можете помочь!

Итак.В настоящее время я занимаюсь разработкой приложения, которое позволяет пользователям выбирать четыре различных изображения из набора изображений, которые я сохранил в своей папке res / drawable /, а затем сохранить эти варианты в виде записи в базе данных. Однако затем мне нужнобыть в состоянии повторно отобразить эти четыре изображения, когда пользователь запрашивает их, и я не уверен, каков наилучший способ хранения изображений, поскольку моя текущая настройка не будет работать для меня в будущем.

Прямо сейчас у меня это работает, так что я фактически вставляю идентификаторы int R.java в базу данных для каждого из изображений, поэтому база данных имеет четыре столбца: img1 (int), img2 (int), img3 (int),img4 (int).Затем, когда я пишу запрос, я просто использую эти значения вместо R.drawable.someImage.

Работает нормально.За исключением ... когда я добавляю новые изображения в мою папку res / drawable, меняются все идентификаторы drawable!Тогда идентификаторы, которые у меня есть в базе данных, неверны, и некоторые вытягивают неправильные изображения, а некоторые выдают NullPointerExceptions!

Это проблема, потому что я хочу иметь возможность обновлять приложение новыми изображениями послепользователи скачивают его.Как я должен хранить эти изображения, чтобы их можно было динамически выбирать, а затем снова получать надежные ссылки?

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Это проблема, потому что я хочу иметь возможность обновлять приложение новыми изображениями после того, как пользователи скачают его.

Я не совсем понимаю - если выЕсли вы будете распространять новые изображения «после», пользователи загрузят ваше приложение, тогда новые изображения никогда не будут иметь идентификаторы ресурсов (как в R.java), так как они автоматически генерируются как часть процесса сборки.

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

Если вы собираетесь периодически обновлять приложение новыми изображениями и пользователи загружают обновленные версииПриложение, вы можете найти идентификатор ресурса во время выполнения, используя ...

int resId = getResources.getIdentifier("img1", "drawable", "com.mycompany.mypackagename");

На этом этапе, конечно, вам нужно знать имена всех доступных для рисования элементов, хотя это может быть достигнуто с помощью строкимассив в ваших res / values ​​/ strings.xml.

Если, однако, вы хотите добавить новые изображения без необходимости обновления пользователем приложения, я бы подумал о сохранении изображения дисвященник (например, на SD-карте).Таким образом, вам просто нужно будет сохранить путь к файлам изображений в БД.

0 голосов
/ 01 марта 2011

Ресурсы могут быть доступны как необработанные данные: используйте AssetManager.open (..) Затем вы можете использовать BitmapFactory.decodeStream (..) для создания битовой карты из потока данных .

Таким образом, вы можете просто сохранять имена файлов изображений и создавать растровые изображения с помощью приведенных выше команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...