Лучший способ сохранить идентификатор ресурса в базе данных на Android
В моем приложении я хочу иметь возможность хранить идентификатор ресурса некоторых иконок в базе данных. Я полагаю, что это не сохранение, потому что на более поздних этапах (обновления приложения) я могу захотеть добавить новые значки в приложение, чтобы все идентификаторы могли измениться? Как лучше хранить ресурс на тот случай, если я не хочу хранить иконки в виде больших двоичных объектов?
В качестве примера, скажем, у меня есть игра 1.0, где я позволяю пользователю выбрать аватар для своего персонажа из списка аватаров. Я хочу сохранить этот идентификатор аватара в БД и быть уверенным, что если я добавлю больше аватаров в игру 1.1 - пользователь все равно увидит его выбор.
1 ответ
Лучший способ (на мой взгляд) - сохранить имя записи ресурса.
String iconName = getResources().getResourceEntryName(R.drawable.your_icon);
Таким образом, столбец базы данных SQLite, в котором вы хотите сохранить значок, будет иметь тип TEXT
, Вы правы в том, что хранение идентификаторов ресурсов - плохая практика, потому что они воссоздаются при компиляции приложения, поэтому вы не можете полагаться на то, что они не меняются (я усвоил это нелегко, все значки моего приложения испортились).
Чтобы получить идентификатор ресурса из строки, когда вам это нужно, позвоните
int resID = getResources().getIdentifier(iconName, "drawable", getPackageName());
Обратите внимание, что оба getResources()
а также getPackageName()
методы из Context
, поэтому вам нужно иметь ссылку на контекст приложения / действия, чтобы иметь возможность вызывать эти методы.