【发布时间】:2023-02-01 18:36:49
【问题描述】:
在 android 中,我循环遍历数据库并分配文本和图像:
Cursor res = myDb.getAllData();
while (res.moveToNext()) {
Actors actor = new Actors();
actor.setName(res.getString(1));
String th = res.getString(11);
Integer thumb = this.getResources().getIdentifier(th, "drawable", "mypackage");
actor.setThumb(R.drawable.th);
}
然而,Lint 建议不要使用 getIdentifier - 不鼓励使用此函数,因为资源反射使得执行代码的构建优化和编译时验证变得更加困难。
在数据库列中,我只有图像名称(字符串)。如何替换 getIdentifier?
即使我可能将 DB 列直接更改为 R.drawable.imagename,它仍然是一个字符串,对于 setThumb,我需要一个可绘制对象。
【问题讨论】:
-
有多少张图片?您可以使用
switch语句,或构建和缓存字符串到标识符值的Map<String, Integer>并使用它。 -
大约有200张图片。它们都在 drawable 文件夹中,我只想根据它们在数据库中的名称列出它们。我知道我也可以使用 Picasso 库,但不需要额外的库。目前,getIdentifier 效果很好,但正如我提到的,不建议使用。
-
我相信是时候将数据库从字符串迁移到整数作为第一步了;那么一切都会很简单
-
数据库列中的整数是什么?我需要那里的图像名称。即使你在数据库中有一个整数,你也不能在代码中动态地使用它作为可绘制对象,因为可绘制对象是可绘制的,除非你将可绘制对象 ID 存储在数据库中,我不知道所有 200 张图像,并且会更多未来
-
您可以将可绘制对象存储到 XML 数组或什至 java 数组中(与循环的顺序相同);并将该整数(每个可绘制顺序)而不是字符串存储到数据库中。
标签: android