Ошибка записи и чтения растрового изображения в и из временного файла кэша Android?

Вот мой код, когда я пишу в файл

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 ответ

Решение

ОБНОВЛЕНИЕ: Я нашел проблему и исправил ее, для всех, кто заинтересован, смотрите ниже.

Я изменил его, чтобы использовать методы 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;
}
Другие вопросы по тегам