我将我的图像存储在drawable中,并将它们的资源ID存储在SQLite数据库中。我的数据库是在应用程序第一次启动时创建的。
将图像ID保存在数据库中是不是很好,或者每次应用程序启动时id是否都会更改?
如果id更改然后在取回图像ID时我可能会收到错误。那么,将图像ID存储在数据库中是个好主意吗?
我需要将图像路径与其他相关数据一起存储在数据库中,这就是我将图像ID存储在数据库中的原因。
答案 0 :(得分:4)
一种方法是将stringsable中的drawable存储为字符串数组,如下所示:
<string-array name="location_flags">
<item>@drawable/ic_image_name</item>
<item>@drawable/ic_image_name</item>
<item>@drawable/ic_image_name</item>
<item>@drawable/ic_image_name</item>
<item>@drawable/ic_image_name</item>
<item>@drawable/ic_image_name</item>
<item>@drawable/ic_image_name</item>
</string-array>
然后在您的活动代码中阅读此数组:
TypedArray locationFlags=getResources().obtainTypedArray(R.array.location_flags);
然后应用for循环,您可以得到类似这样的Drawable:
for(int i=0i<locationFlags.length();i++)
{
Drawable drawable = locationFlags.getResourceId(i, -1);
}
确保在使用后回收TypedArray,因为它是共享资源:
locationFlags.recycle();
答案 1 :(得分:3)
最好的方法是将图像名称直接存储到数据库中并获取它,然后使用
int resID = this.getResources().getIdentifier("your photo name fetched from database","drawable","package name");
image.setResourceID(resID);
答案 2 :(得分:0)
存储ID是个坏主意,但你的目的是什么? 更好的想法是将缩略图存储到数据库而不是ID。 这对我有帮助 may this example help you 执行以下步骤
获取图片的缩略图
final int thumbnailSize = 128; //定义你的尺寸
Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(imagePath), THUMBSIZE,THUMBSIZE);
将其转换为字节数组
Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.thumbnail); ByteArrayOutputStream out = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.PNG,100,out); byte [] buffer = out.toByteArray();
将其另存为Blob
ContentValues cv = new ContentValues(); cv.put(CHUNK,缓冲区); //表的CHUNK blob类型字段 long rawId = database.insert(TABLE,null,cv); // TABLE表名称
我曾经使用过这个,但这可以帮到你