Получить все изображения с URL (Интернет) и сохранить их локально (SDCard) - Android - PullRequest
1 голос
/ 29 января 2012

Ну ... мое приложение имеет много изображений в Интернете.Они хранятся в папках и подпапках, таких как категории.

При первом запуске моего приложения я хотел бы разрешить пользователю загружать весь этот контент на свою внутреннюю SD-карту.

Здесьвот что я пытаюсь сделать:

    URL url = new URL ("www.mysite.com/folder1/subfolder1/anImage.png");
    InputStream input = url.openStream();
    try {
        OutputStream output = new FileOutputStream ("/sdcard/myImage.png");
        try {
            byte[] buffer = new byte[aReasonableSize];
            int bytesRead = 0;
            while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
                output.write(buffer, 0, bytesRead);
            }
        } finally {
            output.close();
        }
    } finally {
        input.close();
    }

Хорошо ... приведенный выше код позволяет мне сохранить ОДНО изображение из одной ссылки.

Как я могу получить их все?

Также возможно ли сообщить пользователю, сколько данных (МБ) будет передано?

ЛюбойПомощь приветствуется!

Спасибо!

1 Ответ

0 голосов
/ 29 января 2012

Здесь - хороший пример и объяснение , как загружать изображения .Вы можете рассчитать размер удаленных файлов следующим способом.Передайте массив URL-адресов этому методу, и он вернет вам размер в байтах.

public static int getSize(String[] urls){
    int sizeInBytes = 0;
    for (String string : urls) {
        sizeInBytes += ((int) (new File(string)).length());         
    }
    return sizeInBytes;
}

Вы также можете рассчитать размер изображений после их загрузки на SD-карту. Передайте файл каталога (где вы сохранили все изображения) в метод getSize(...), и он вернет размер каталога в байтах.

String basePath = Environment.getExternalStorageDirectory().toString();
File file = new File(basePath +"file/myImageDirectory/");
ClassName.getSize(file);

Метод вычисления размера каталога.

public static int getSize(File directory) {
    return getSize(directory, 0);
}
private static int getSize(File directory,int sizeInBytes) {

    if (directory == null)
        return sizeInBytes;
    if (!directory.exists())
        return sizeInBytes;
    if (directory.isDirectory()) {
        String[] list = directory.list();
        // Some JVMs return null for File.list() when the
        // directory is empty.
        if (list != null) {
            for (int i = 0; i < list.length; i++) {
                File entry = new File(directory, list[i]);
                if (entry.isDirectory()) {
                    sizeInBytes = getSize(entry,sizeInBytes);
                } else {
                    sizeInBytes +=entry.length();
                }
            }
        }
    }
    return sizeInBytes;
}

Один MB=1024*1024, Вы можете получить SizeInMB, разделив sizeInBytes на размер в МБ;sizeInMB=sizeInBytes/MB;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...