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

Ani*_*rma 7 android android-sqlite

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

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

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

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

nik*_*kar 5

一种方法是将可绘制对象存储在 strings.xml 中作为字符串数组,如下所示:

 <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>
Run Code Online (Sandbox Code Playgroud)

然后在您的活动代码中读取此数组:

TypedArray locationFlags=getResources().obtainTypedArray(R.array.location_flags);
Run Code Online (Sandbox Code Playgroud)

然后应用 for 循环,您可以获得 Drawable 如下所示:

for(int i=0i<locationFlags.length();i++)
 {

   Drawable drawable = locationFlags.getResourceId(i, -1);
 }
Run Code Online (Sandbox Code Playgroud)

使用 TypedArray 后一定要回收它,因为它是一个共享资源:

 locationFlags.recycle();
Run Code Online (Sandbox Code Playgroud)


Ani*_*rma 4

最好的方法是将图像名称直接存储到数据库中并获取它,然后使用

int resID = this.getResources().getIdentifier("your photo name fetched from database","drawable","package name");

image.setResourceID(resID);
Run Code Online (Sandbox Code Playgroud)