Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Gared
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 8
#1

Загрузка файла по URL - Программирование Android

21.03.2016, 13:26. Просмотров 767. Ответов 12
Метки нет (Все метки)

Добрый день.

Уже несколько дней бьюсь над одной проблемой - как реализовать скачивание файла по URL. Я написал парсер определенного ресурса. В полученной информации, кроме всего прочего, мне приходит адрес/ссылка перейдя по которой в браузере начинается скачивание файла. Вопрос вот в чем - как мне реализовать скачивание файла по ссылке в приложении Android. При чем файл должен сохраняться во внутреннюю память смартфона, например в папку Downlod.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2016, 13:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Загрузка файла по URL (Программирование Android):

Загрузка файла с сервера - Программирование Android
Файл загружается но видимо неправильно. Так как этот mp3-файл не воспроизводится. Предполагаю что нада поменять User-agent, но какой ? ...

Загрузка 3d объекта из файла - Программирование Android
Вечер добрый, форумчане. Есть необходимость загрузить 3d объект, созданный в autocad, из файла. В дальнейшем - отрисовать его...

Загрузка файла из сети интернет - Программирование Android
Добрый день. Я, после большого перерыва, вернулся к своему проекту. Нашел примеры как скачивать файл из интернета. Вот как я это...

Загрузка файла из сети, и его выполнение - Программирование Android
Здравсвуйте, пытаюсь загрузить файл из сети (это файл приложения *.apk), и после загрузки сразу его запустить. Вот то что накодил, тут...

Загрузка файла в файловую систему эмклятора - Программирование Android
Как загрузить файл в систему? жму на stdcard, потом push fili onto device, потом идет полоса загрузка файла и вылет ошибок в логкат ...

Загрузка APK файла программы с google play программно - Программирование Android
Делаю автоматическое обновление программы если в google play имеется более свежая версия её. Сделал проеврку версии. Как реализовать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
21.03.2016, 15:21 #2
да можно кучей способов сделать, хоть и так (без особого рефакторинга и уже набившего оскомину асинктаска)
1. в манифесте прописать разрешение
XML
1
    <uses-permission android:name="android.permission.INTERNET" />
2. добавляем библиотеку, например Apache IO, для этого в файле build.gradle в зависимостях добавляем
XML
1
compile 'commons-io:commons-io:2.4'
3. где-то в активити помещаем такой код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    private void onDownloadComplete(boolean success) {
        // файл скачался, можно как-то реагировать
        Log.i("***", "************** " + success);
    }
 
    private class LoadFile extends Thread {
        private final String src;
        private final File dest;
 
        LoadFile(String src, File dest) {
            this.src = src;
            this.dest = dest;
        }
 
        @Override
        public void run() {
            try {
                FileUtils.copyURLToFile(new URL(src), dest);
                onDownloadComplete(true);
            } catch (IOException e) {
                e.printStackTrace();
                onDownloadComplete(false);
            }
        }
    }
4.когда надо что-то качнуть, пишем
Java
1
new LoadFile(src, dest).start();
Пример рабочий, но упрощенный, без использования тредпулов и прочего. Для начала сгодится.
0
Gared
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 8
21.03.2016, 16:49  [ТС] #3
Правильно ли я понимаю Ваш код - src это будет мой URL?
И я не понял куда будет скачиваться мой файл.
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
21.03.2016, 17:20 #4
а блин, че-то не все скопировал,
там примерно так будет
Java
1
2
3
4
String destFileName = "img.jpg";
        String src = "https://img-fotki.yandex.ru/get/0/y230693.0/0_185_f52b55e3_M.jpg";
        File dest = new File(Environment.getExternalStorageDirectory() + "/Download/" + destFileName);
        new LoadFile(src, dest).start();
0
Gared
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 8
22.03.2016, 16:25  [ТС] #5
Паблито, Спасибо, еще не попробовал.
А можешь пример с АсинхТаском дать? Буду очень признателен ))
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
23.03.2016, 01:12 #6
Gared,

1. Интерфейс для результата:

Java
1
2
3
4
5
6
7
8
9
10
11
public interface FileLoadingListener {
 
    void onBegin();
 
    void onSuccess();
 
    void onFailure(Throwable cause);
 
    void onEnd();
 
}

2. Таска

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class FileLoadingTask extends AsyncTask<Void, Void, Void> {
 
    private String url;
    private File destination;
    private FileLoadingListener fileLoadingListener;
    private Throwable throwable;
 
    public FileLoadingTask(String url, File destination, FileLoadingListener fileLoadingListener) {
        this.url = url;
        this.destination = destination;
        this.fileLoadingListener = fileLoadingListener;
    }
 
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        fileLoadingListener.onBegin();
    }
 
    @Override
    protected Void doInBackground(Void... params) {
        try {
            FileUtils.copyURLToFile(new URL(url), destination);
        } catch (IOException e) {
            throwable = e;
        }
        return null;
    }
 
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        fileLoadingListener.onEnd();
        if (throwable != null) {
            fileLoadingListener.onFailure(throwable);
        } else {
            fileLoadingListener.onSuccess();
        }
    }
}
3. Запуск

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
new FileLoadingTask(
                "https://....jpg",
                new File(Environment.getExternalStorageDirectory() + "/Download/img.jpg"),
                new FileLoadingListener() {
                    @Override
                    public void onBegin() {
 
                    }
 
                    @Override
                    public void onSuccess() {
 
                    }
 
                    @Override
                    public void onFailure(Throwable cause) {
 
                    }
 
                    @Override
                    public void onEnd() {
 
                    }
                }).execute();
0
Alexvp
108 / 72 / 8
Регистрация: 03.08.2014
Сообщений: 348
23.03.2016, 08:22 #7
Если закачиваете картинки, то используйте библиотеку Пикассо
0
Gared
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 8
23.03.2016, 08:46  [ТС] #8
YuraAAA,

Большое спасибо. В ближайшее время попробую. ))

Alexvp,

Нет, я торрент файл скачивать буду.
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
23.03.2016, 10:12 #9
Цитата Сообщение от Gared Посмотреть сообщение
Нет, я торрент файл скачивать буду.
А что, торрент-файл работает по тому же протоколу HTTP?
0
Gared
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 8
23.03.2016, 11:46  [ТС] #10
CoolMind,
Я собираюсь скачивать не то на что ссылается торрент файл (фильмы, музыка и т.п.), а сам торрент файл (file.torrent)
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
23.03.2016, 12:23 #11
Gared, (тоже так и подумал...)
0
Gared
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 8
23.03.2016, 12:25  [ТС] #12
CoolMind,
Тогда я не понял вопроса про протокол HTTP
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
23.03.2016, 12:35 #13
Gared, просто у меня было 2 варианта: или HTTP (с торрент-файлом), или P2P (с контентом). Заинтересовало, рассчитывали ли вы на второй или на первый. На всякий случай, спросил, чтобы случайно не было разочарований.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2016, 12:35
Привет! Вот еще темы с ответами:

Загрузка файла через URL и сохранение его в IsolatedStorage - Windows Phone
Совственно задача простая. Есть прямая ссылка на файл. Этот файл нужно загрузить в IsolatedStorage. Для получения stream использую...

Загрузка файла на FTP по URL (ссылки) с разных сайтов - PHP Сети
Нужен скрипт на PHP для загрузки файлов на FTP по URL (ссылки). Т.е. чтобы можно было вставить в поле формы ссылку на файл например такую...

Узнать полный URL. Дата изменения файла по URL - Lazarus
Доброго времени суток, уважаемые форумчане. Долгих лет и славных лет вам, уважаемый UI... Работаю с Indy. Вообщем необходимы некоторые...

Загрузка по URL - PHP
есть код: &lt;?PHP if (!empty($_GET)) { function filesize_GET($file1) { if(!file_exists($file1)) return &quot;file Missing&quot;; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.03.2016, 12:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru