#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- Большое спасибо 🙂