Удаление кэшированных изображений из папки

#android #android-activity

#Android #android-активность

Вопрос:

В настоящее время я сохраняю изображения, которые загружаю из Интернета, на диск. Я хочу иметь возможность удалять изображения, когда пользователь закрывает приложение. Я хочу, чтобы все изображения были сохранены в одной папке, чтобы их было легко удалить. Я сделал getActivity().getCacheDir().getAbsolutePath() File.separator "newfoldername" , чтобы получить путь к папке. Не уверен, как добавить изображения в папку.

 public void saveImage(Context context, Bitmap b, String name_file, String path) {
    FileOutputStream out;
    try {
        out = context.openFileOutput(name_file, Context.MODE_PRIVATE);
        b.compress(Bitmap.CompressFormat.JPEG,90, out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public Bitmap getImageBitmap(Context context, String name) {
    try {
        FileInputStream fis = context.openFileInput(name);
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize =  1;
        Bitmap  b =   BitmapFactory.decodeStream(fis,null, options);
        b.getAllocationByteCount());
        fis.close();
        return b;
    } catch (Exception e) {}
    return null;
}
  

Ответ №1:

Вы не должны сохранять изображения в своей папке кэша, поскольку вы не можете полагаться на нее в соответствии с документацией. Лучшим подходом было бы сохранить их на вашей SD-карте. Согласно документации :

 public abstract File getCacheDir()
  

Возвращает абсолютный путь к каталогу кэша конкретного приложения в файловой системе. Эти файлы будут удалены первыми, когда на устройстве закончится хранилище. Нет никакой гарантии, когда эти файлы будут удалены. Примечание: вы не должны полагаться на то, что система удалит эти файлы за вас; у вас всегда должен быть разумный максимум, например, 1 МБ, для объема пространства, которое вы занимаете файлами кэша, и обрезать эти файлы при превышении этого пространства.

ДЛЯ СОХРАНЕНИЯ

 private String saveToInternalSorage(Bitmap bitmapImage){
    File directory = getApplicationContext().getDir("MY_IMAGE_FOLDER"
    ,Context.MODE_PRIVATE);

    File mypath=new File(directory,"profile.jpg");
    FileOutputStream fos = null;
    try {           
        fos = new FileOutputStream(mypath);
        bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return directory.getAbsolutePath();
}
  

ДЛЯ ЧТЕНИЯ

 private void loadImageFromStorage(String path)
{
    try {
        File file = new File(path, "Image.jpg");
        Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(file));
        ImageView img = (ImageView)findViewById(R.id.my_imgView);
        img.setImageBitmap(bitmap);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
  

ДЛЯ УДАЛЕНИЯ :

 String dir = getApplicationContext().getDir("MY_IMAGE_FOLDER"
    ,Context.MODE_PRIVATE);
if (dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i  ) {
            new File(dir, children[i]).delete();
        }
    }
  

Комментарии:

1. @AndroidWarrior- как я могу прочитать эти изображения? и как я могу удалить папку при закрытии приложения.

2. @AndroidWarrior — например, получение растрового изображения из сохраненного изображения, чтобы я мог его отобразить

3. @AndroidWarrior — также я хочу, чтобы изображения были приватными. Чтобы их нельзя было найти с помощью файлового менеджера

4. @AndroidWarrior- Большое спасибо 🙂