file:/// android_asset不起作用

时间:2014-05-30 12:39:49

标签: android android-assets

我将图像存储在assets / img / categories文件夹中,并尝试使用以下代码加载它们:

ImageLoader.getInstance().displayImage(String.format("file:///android_asset/img/categories/%d.JPG", category.getId()), mImageIv);

似乎没问题,但不起作用:

E/ImageLoader(28790): /android_asset/img/categories/9.JPG: open failed: ENOENT (No such file or directory)
E/ImageLoader(28790): java.io.FileNotFoundException: /android_asset/img/categories/9.JPG: open failed: ENOENT (No such file or directory)

为什么它不起作用?

3 个答案:

答案 0 :(得分:14)

file:///android_asset仅适用于WebView

我不知道ImageLoader是什么,但看看它是否接受InputStream。如果是,请使用AssetManageropen()获取所需资产的InputStream

答案 1 :(得分:3)

我认为对于assests文件夹

,URI的用法是这样的
String imageUri = "assets://image.png";
imageLoader.displayImage(imageUri, imageView);

只需查看this参考

即可

所以你改变你的代码就像这样

ImageLoader.getInstance().displayImage(String.format("assets:///img/categories/%d.JPG", category.getId()), mImageIv);

甚至可以像这样从SDCard加载

String imageUri = "file:///mnt/sdcard/image.png"; 

让我知道这是否有效

答案 2 :(得分:2)

这是一个(简化的!)帮助程序例程,如果URI使用InputStream模式,它将以file:///android_asset/打开资产:

public static InputStream open(String urlString, Context context) throws IOException {
    URI uri = URI.create(urlString);

    if (uri.getScheme().equals("file") && uri.getPath().startsWith("/android_asset/")) {
        String path = uri.getPath().replace("/android_asset/", ""); // TODO: should be at start only
        return context.getAssets().open(path);
    } else {
        return uri.toURL().openStream();
    }
}

用法如:

InputSteam is = Helper.open("file:///android_asset/img/categories/001.JPG", this); // "this" is an Activity, for example

未显示:异常处理。