如何正确引用资产文件夹中的图像?

时间:2014-02-13 02:15:34

标签: android android-assets simpleadapter

我的资源文件夹中有一些图像,我想使用SimpleAdapter将它们加载到ListView中。

我通过文件名引用图像,例如:“my_image.jpg”。

以下是一些代码:

ListView lv = (ListView) findViewById(R.id.list);
rows = new ArrayList<Map<String, Object>>();
    for (String s : imageNames) {
        rows.add(createRow(s));
    }

SimpleAdapter adapter = new SimpleAdapter(
            this, 
            rows, 
            R.layout.card_list_row, 
            new String[] {"Image"}, 
            new int[] {R.id.list_row_image});
    lv.setAdapter(adapter);

createRow方法:

private Map<String, Object> createCardRow(String s) {
    Map<String, Object> row = new HashMap<String, Object>();
    row.put("Image", "file:///android_asset/" + s + ".jpg");
    return row;
}

执行此操作时,出现以下错误:

02-12 20:01:22.615: I/System.out(17876): resolveUri failed on bad bitmap uri: file:///android_asset/my_image.jpg

还有一个FileNotFoundException。我显然知道该图像确实存在于assets文件夹中。我怎样才能正确引用它?

2 个答案:

答案 0 :(得分:0)

请使用AssetManager

使用硬编码的绝对路径绝不是一个好的做法,无论它是否有效。

网上有很多源代码示例,请谷歌搜索。

编辑:

你看到assetManager中有一个open方法,它为指定的文件资源返回InputStream。然后,您可以使用decodeStream获取Bitmap对象。

一旦您需要图像,就可以使用上述步骤。你可以很容易地找到一个例子,我不会在这里展示它。

答案 1 :(得分:0)

您好尝试使用以下功能。

public void loadDataFromAsset(String imagenamefomdb) {

        try {



            InputStream ims = getAssets().open(imagenamefomdb);
            Drawable d = Drawable.createFromStream(ims, "image");
            imageview.setImageDrawable(d);
            ims.close();

        } catch (IOException ex) {
            return;
        }

    }

希望它适合你