每次应用程序启动时资源ID都会更改

时间:2014-07-19 05:28:17

标签: android android-sqlite

我将我的图像存储在drawable中,并将它们的资源ID存储在SQLite数据库中。我的数据库是在应用程序第一次启动时创建的。

将图像ID保存在数据库中是不是很好,或者每次应用程序启动时id是否都会更改?

如果id更改然后在取回图像ID时我可能会收到错误。那么,将图像ID存储在数据库中是个好主意吗?

我需要将图像路径与其他相关数据一起存储在数据库中,这就是我将图像ID存储在数据库中的原因。

3 个答案:

答案 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 执行以下步骤

  1. 获取图片的缩略图

    final int thumbnailSize = 128; //定义你的尺寸

    Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(imagePath),                 THUMBSIZE,THUMBSIZE);

  2. 将其转换为字节数组

    Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.thumbnail); ByteArrayOutputStream out = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.PNG,100,out); byte [] buffer = out.toByteArray();

  3. 将其另存为Blob

    ContentValues cv = new ContentValues();  cv.put(CHUNK,缓冲区); //表的CHUNK blob类型字段  long rawId = database.insert(TABLE,null,cv); // TABLE表名称

    我曾经使用过这个,但这可以帮到你