15

我在资产文件夹中有一个 .gif 文件,例如 assets/Files/android.gif。当我尝试打开文件时,它会在第二行引发异常

AssetManager mngr=getAssets();
InputStream is2=mngr.open("Files/android.gif");

所以是不是我试图打开一个图像文件,尽管如果我尝试打开一个文本文件,相同的代码可以工作?这里有什么问题。

4

6 回答 6

31

这些线路运行良好——

InputStream assetInStream=null;

try {
    assetInStream=getAssets().open("icon.png");
    Bitmap bit=BitmapFactory.decodeStream(assetInStream);
    img.setImageBitmap(bit);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if(assetInStream!=null)
    assetInStream.close();
}

如果您的图像非常大,那么您应该在将图像解码为位图之前对其进行缩放。请参阅如何有效地显示大图像

于 2011-12-14T09:36:41.370 回答
4

我怀疑您收到有关未处理异常类型 IOException 的投诉。如果是这种情况,您需要将对 mgr.open 的调用放在 try-catch 块中,以处理检索 InputStream 对象时可能发生的异常。

AssetManager mngr = getAssets();
try {
    InputStream is2 = mngr.open("Files/android.gif");
} catch (final IOException e) {
    e.printStackTrace();
}
于 2009-12-19T18:38:47.720 回答
1

不知道事情是否发生了变化,但我在 Android 1.1 中有一个应用程序,它打开图标然后在视图中显示它们,我是这样做的:

BufferedInputStream buf = new BufferedInputStream(mContext.openFileInput(value));
Bitmap bitmap = BitmapFactory.decodeStream(buf);
于 2009-12-19T14:29:47.780 回答
1

我相信这样做的首选方法是将图像放在 res/drawable 目录中。然后你可以像这样得到一个 Drawable:

Drawable d = Resources.getSystem().getDrawable(R.drawable.android);
于 2009-12-19T16:43:13.033 回答
0

Mina,我遇到了同样的问题......我在“资产”中有图像和 XML 文件,我可以读取 XML 文件,但不能读取图像。经过几个小时的挫折,我终于找到了解决方案!

我在这里发布了解决方案: Null-pointer issue displayed an image from assets folder Android 2.2 SDK

于 2011-05-05T19:15:42.707 回答
0

我不相信 Android 会自动支持 gif。尝试使用相同代码的 png 或 jpg。

于 2018-10-27T23:29:52.473 回答