从临时缓存文件android写入和读取位图时出错?

时间:2013-08-06 21:20:35

标签: android caching bitmap fileinputstream fileoutputstream

这是我写文件时的代码

Bitmap bitmap;
InputStream is;

try
{
    is = (InputStream) new URL(myUrl).getContent();
    bitmap = BitmapFactory.decodeStream(is);
    is.close();

     //program crashing here
    File f = File.createTempFile(myUrl,null,MyApplication.getAppContext().getCacheDir());
    FileOutputStream fos = new FileOutputStream(f);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
    fos.flush();
    fos.close();
}
catch(Exception e)
{
    bitmap = null;
}

这是我从同一个文件中读取的代码

Bitmap bitmap;
try
{
    File f = new File(myUrl);
    FileInputStream fis = new FileInputStream(f);
    BufferedInputStream bis = new BufferedInputStream(fis);
    byte[] bitmapArr = new byte[bis.available()];
    bis.read(bitmapArr);
    bitmap = BitmapFactory.decodeByteArray(bitmapArr, 0, bitmapArr.length);
    bis.close();
    fis.close();
}
catch(Exception e)
{
    bitmap = null;
}

程序在第一块代码中创建临时文件时崩溃。

编辑:我收到了libcore.io.ErrnoException

1 个答案:

答案 0 :(得分:1)

更新:我找到了问题并修复了它,对于任何有兴趣的人都可以看到。

我把它改为使用openFileOutput(String,int)和openFileInput(String)方法,我应该从一开始就这样做。

以下是工作代码,用于将包含图像的URL的输入流解码为位图,压缩位图并将其存储到文件中,以及稍后从该文件中检索所述位图。

Bitmap bitmap;
InputStream is;

try
{
    is = (InputStream) new URL(myUrl).getContent();
    bitmap = BitmapFactory.decodeStream(is);
    is.close();

    String filename = "file"
    FileOutputStream fos = this.openFileOutput(filename, Context.MODE_PRIVATE);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
    fos.close();
}
catch(Exception e)
{
    bitmap = null;
}

Bitmap bitmap;

try
{
    String filename = "file";
    FileInputStream fis = this.openFileInput(filename);
    bitmap = BitmapFactory.decodeStream(fis);
    fis.close();
}
catch(Exception e)
{
    bitmap = null;
}