在循环中加载许多图像时抛出Resources.NotFoundException

时间:2016-10-20 23:28:40

标签: java android android-studio drawable android-drawable

我在一个带图像名称的循环中显示了近4,000张图像。

以下是我用来从drawable文件夹中获取图片的代码

     for(int i=0; i<count(images_array); i++) {
            mDrawableName = images_array(i);

            int resID = res.getIdentifier(mDrawableName, "drawable", activity.getPackageName());
            Drawable drawable = res.getDrawable(resID);
            image.setImageDrawable(drawable);
     }

问题是:

  1. 当资源文件夹中找不到图像名称时,我的应用程序会抛出 我是一个例外并且崩溃。
  2. 有没有更好的方法从drawable加载4000图像 列表显示?有什么方法可以检查图像是否不可绘制 然后显示占位符图像?

2 个答案:

答案 0 :(得分:1)

  

通过我在资源文件夹中找不到图像名称   异常和崩溃。

这不是问题,因为对于不存在的资源,getIdentifier返回0,然后getDrawable会为Resources.NotFoundException抛出id = 0,这是预期的行为。不是有效的身份证明。)

  

有什么方法可以检查图像是否是可绘制的mot然后显示   占位符图片?

您要么捕获该异常,要么检查getIdentifier是否返回0 我不知道你的其余代码,所以根据你发布的内容,你可以这样做:

for (int i=0; i<count(images_array); i++) {
    mDrawableName = images_array(i);

    int resID = res.getIdentifier(mDrawableName, "drawable", activity.getPackageName());
    Drawable drawable;
    if (resID == 0) {
        drawable = res.getDrawable(R.drawable.placeholderimage, null);
    } else {
        drawable = res.getDrawable(resID);
    }
    image.setImageDrawable(drawable);
}

注意:
现在,getDrawable(int id)已被弃用,从API 22开始 在示例代码中,我使用getDrawable(int id, Resources.Theme theme)代替 您可能想要查看其他alternatives

  

有没有更好的方法从listview中的drawable加载4000张图片?

尝试使用Android的RecyclerView和/或第三方库,例如Glide

答案 1 :(得分:0)

 Boolean fileFound = true;
        try{
            int resID = res.getIdentifier(mDrawableName , "drawable", activity.getPackageName());
            Drawable drawable = res.getDrawable(resID );
            image.setImageDrawable(drawable );
        }catch (Resources.NotFoundException e){
                fileFound = false;
        }
        if(!fileFound){
            int resID = res.getIdentifier("img_not_found" , "drawable", activity.getPackageName());
            Drawable drawable = res.getDrawable(resID );
            image.setImageDrawable(drawable );
        }