【问题标题】:Android: replace ExternalStorageDirectory for AssetsAndroid:将 ExternalStorageDirectory 替换为资产
【发布时间】:2014-02-21 05:52:06
【问题描述】:

如何从 Assets 文件夹而不是 android.os.Environment.getExternalStorageDirectory()? 获取图像我需要根据我的要求替换此代码:

File directory = new File(
            android.os.Environment.getExternalStorageDirectory()
                    + File.separator + AppConstant.PHOTO_ALBUM);

谢谢

编辑:

ArrayList filePaths = new ArrayList();

if (directory.isDirectory()) {

        File[] listFiles = directory.listFiles();

        if (listFiles.length > 0) {

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

                String filePath = listFiles[i].getAbsolutePath();

                if (IsSupportedFile(filePath)) {

                    filePaths.add(filePath);
                }
            }
        } else {
            Toast.makeText(
                    _context,
                    AppConstant.PHOTO_ALBUM
                            + " is empty. Please load some images in it !",
                    Toast.LENGTH_LONG).show();
        }

    } else {
        AlertDialog.Builder alert = new AlertDialog.Builder(_context);
        alert.setTitle("Error!");
        alert.setMessage(AppConstant.PHOTO_ALBUM
                + " directory path is not valid! Please set the image directory name AppConstant.java class");
        alert.setPositiveButton("OK", null);
        alert.show();
    }

【问题讨论】:

    标签: android directory external


    【解决方案1】:

    这里是方法,如何获取已知资产子文件夹中的所有图像。您只需要知道资产中包含图像的子文件夹的名称。希望它会有所帮助。

    private List<Bitmap> imageListFromAsset(String dirFrom) {
        //list of images in assets
        List<Bitmap> imageList = new ArrayList<Bitmap>();
    
        Resources res = getResources();
        AssetManager am = res.getAssets();
        String fileList[];
        try {
            fileList = am.list(dirFrom);
    
            for (String fileName : fileList) {
                imageList.add(getImageFromAsset(dirFrom+ File.separator +fileName, am));
            }
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return imageList;
    
    }
    
    private Bitmap getImageFromAsset(String path, AssetManager assetManager) {
        InputStream istr = null;
        try {
            istr = assetManager.open(path);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Bitmap bitmap = BitmapFactory.decodeStream(istr);
        return bitmap;
    }
    

    如果您只需要这些图像的路径,请在fileList = am.list(dirFrom); 处停止。不要忘记在文件名之前添加 dirName。

    根据评论中的要求进行编辑:

    Resources res = getResources();
    AssetManager am = res.getAssets();
    String fileList[];
    try {
        fileList = am.list(dirFrom);
    
        for (String fileName : fileList) {
            fileName = dirFrom + File.separator + fileName;
        }
    
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    现在您在 assets/dirName 中拥有所有文件路径。现在转换为 ArrayList;

    List<String> imagePaths = new ArrayList<String>(Arrays.asList(fileList));
    

    现在图像路径在列表中。

    【讨论】:

    • 我需要一个来自 Assets 的 (path + nameImage) 的 ArrayList
    • 已编辑原始答案。
    • 是的,我只需要 Assets/myFolder 的所有图像的路径。我需要一个带有路径的 ArrayList。请帮帮我
    • 字符串文件列表[] = am.list(dirFrom); - 这将为您提供资产中子文件夹 dirName 中所有图像的文件名。因此,您必须将所有图像移动到 assets/[dirName]/ 然后您可以使用assetmanager 获取这些文件,如答案中所述。明白了吗?将 String[] 转换为 List:stackoverflow.com/a/10530379/1876084
    • 没有。我已经编辑了我的代码。我需要从 Assets/myFolder 替换 ArrayList 的新代码(外部存储)。
    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多