【问题标题】:Unable to load imageView from image array list无法从图像数组列表加载 imageView
【发布时间】:2019-11-22 14:03:58
【问题描述】:

因此,我需要使用本地保存的 .png 文件动态加载图像按钮。从设备的内部存储中,我收集在特定文件夹中找到的图像。它工作正常。

List<String> fileNames = new ArrayList<>();
        File folder = new File(Environment.getExternalStorageDirectory(), "Pictures/Screenshots");
        if (!folder.exists()) folder.mkdir();
        for (File file : folder.listFiles()) {
            String filename = file.getName().toLowerCase();
            if (filename.endsWith(".jpg") || filename.endsWith("jpeg") || filename.endsWith(".png")) {
                fileNames.add(filename);
            }
        }

将结果记录为

[123.png]

最后我需要为图像按钮设置背景为 123.png 图像。为此,我在循环中使用过

String picName = fileNames.get(i);
            String picName1 = picName.replace(".png", "");
            int resID = getResources().getIdentifier(picName1,"drawable","com.test.ABC");
            imageView.setImageResource(resID);

那一刻我收到了这个错误

11-21 17:54:48.899 27250-27250/com.datamation.swdsfa W/ResourceType: 获取资源编号值时没有包标识符 0x0000007b 11-21 17:54:48.904 27250-27250/com.datamation.swdsfa W/ImageView:找不到资源:123 android.content.res.Resources$NotFoundException:资源 ID #0x7b 在 android.content.res.Resources.getValue(Resources.java:2350) 在 android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:330) 在 android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:433) 在 android.support.v7.widget.VectorEnabledTintResources.getDrawable(VectorEnabledTintResources.java:67) 在 android.widget.ImageView.resolveUri(ImageView.java:648) 在 android.widget.ImageView.setImageResource(ImageView.java:377) 在 com.test.ABC.fragment.FragmentTools.ViewImageList(FragmentTools.java:342) 在 com.test.ABC.fragment.FragmentTools.onClick(FragmentTools.java:287) 在 android.view.View.performClick(View.java:4640) 在 android.view.View$PerformClick.run(View.java:19421) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:146) 在 android.app.ActivityThread.main(ActivityThread.java:5602) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 在 dalvik.system.NativeStart.main(Native Method)

提前致谢。

【问题讨论】:

    标签: java android android-resources android-imagebutton


    【解决方案1】:

    您使用imageView.setImageResource(resID); 的方法适用于drawable 文件夹中存在的图像,但正如您所说From internal storage of the device I collect the images found on particular folder. 似乎您正在尝试使用存储在内部存储中某个目录中的图像。所以它不会起作用。

    Check this

    你可以试试这样的,

    File file = new File("some path");
    if(file.exists()){
        Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
        imageView.setImageBitmap(myBitmap);
    }
    

    要获取默认相机目录的路径,您可以尝试,

    File picDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File file = new File(picDir, "your image.png");
    

    【讨论】:

    • 谢谢兄弟。但仍然不适用于此路径“DCIM/Camera/20181221_125634.jpg”且没有任何错误
    • 知道了。但是 if (file.exists()) inside 没有被触发
    • /storage/emulated/0/DCIM
    • 谢谢兄弟。现在由于循环而出现内存不足错误。但是在 if 条件下被解雇了。现在我会修复它。再次感谢兄弟......你节省了我的时间
    【解决方案2】:

    您好,您可以使用 Picasso 或 Glide 轻松完成此操作

    我给出了使用毕加索的例子。

    File file = new File(filepath);
    Picasso.with(activity).load(file).fit().centerCrop().into(image);
    

    【讨论】:

      【解决方案3】:

      你需要修改一点代码

      List<String> fileNames = new ArrayList<>();
          File folder = new File(Environment.getExternalStorageDirectory(), "Pictures/Screenshots");
          if (!folder.exists()) folder.mkdir();
          for (File file : folder.listFiles()) {
              String filename = file.getName().toLowerCase();
              if (filename.endsWith(".jpg") || filename.endsWith("jpeg") || filename.endsWith(".png")) {
                  fileNames.add(Environment.getExternalStorageDirectory() + "Pictures/Screenshots/"  +filename);
              }
          }
      

      您可以简单地使用 Picasso 库将图像放入 Image-Button

      举例

      Picasso.get().load(filename).into(yourImageButton);

      为此,您需要将库添加到 gradle 中

      实现'com.squareup.picasso:picasso:2.5.2'

      供参考,您可以使用此链接Picasso

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多