在我的应用程序中,我希望能够在数据库中存储某些图标的资源ID。我想这不是保存,因为在后期阶段(应用程序升级)我可能想要为应用程序添加新图标,所以所有id都可能会改变?如果我不想将图标存储为blob,那么存储资源的最佳做法是什么?
作为一个例子,假设我有一个游戏1.0,我让用户从一个头像列表中为他的角色选择一个头像。我想在DB中存储这个头像ID,并确保如果我在游戏1.1中添加更多头像 - 用户仍然会看到他的选择。
答案 0 :(得分:6)
最好的方法(在我看来)是存储资源条目名称。
String iconName = getResources().getResourceEntryName(R.drawable.your_icon);
因此,要存储图标的SQLite数据库列将具有类型TEXT
。你是对的,存储资源ID是一种不好的做法,因为它们是在你编译应用程序时重新创建的,所以你不能依赖它们而不是改变(我学到了很多东西,所有应用程序的图标都搞砸了)。
要在需要时从String获取资源ID,请调用
int resID = getResources().getIdentifier(iconName, "drawable", getPackageName());
请注意,getResources()
和getPackageName()
都是来自Context
的方法,因此您需要引用您的应用程序/活动上下文才能调用这些方法。