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

Загрузка данных с удалённого сервера - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Голосование за приложение в плеймаркете http://www.cyberforum.ru/android-dev/thread1533478.html
Думаю через это проходит любой андроид кодер, а именно - напомнить пользователю о святом долге проголосовать за твое детище в гуглплей. Ничего сложного вроде как нет Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("market://details?id=название пакета")); startActivity(intent); А вот дальше начинаются проблемы, как узнать проголосовал ли пользователь? Ведь в...
Android Как отключить Google Now? Кто знает, как запретить приложению вызываться долгим тапом на кнопке home в своем приложении (или даже лаунчере, если это имеет значение)? Или как создать свой класс, который мог бы не совершать абсолютно никаких действий, если этот метод сработает? Что нужно прописать в этом классе? Заранее спасибо. http://www.cyberforum.ru/android-dev/thread1533435.html
Android Разбираю исходник игры Пакман
Можете мне объяснить что к чему в этом классе?Я его в своем проекте использую package es.eduards.pacman; import java.util.HashMap; import java.util.Map; import android.annotation.TargetApi; import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer;
Android Сканирование ссылки http://example/
Как сделать проверку именно определённой части http,допустим: http://example.com/file35 http://example.com/example61 http://example.com/sdk91 Мне надо что-бы только проверялось наличие http://example.com/ Как сделать так? Помогите.
Android Рандомное появление "предметов" на карте гугл http://www.cyberforum.ru/android-dev/thread1533360.html
Как сделать чтобы на карте гугл рандомно появлялись предметы? Мне нужно только это,я с остальным я сам справлюсь,надеюсь хоть кто-нибудь знает
Android Про архитектуру приложения Простите за возможную глупость вопроса - в мыслях запутался, а сам не выпутаюсь:) Допустим, есть одно активити с целой кучей фрагментов. Хорошим ли тут будет решение создавать внутри фрагмента интерфейс, задавать его членом-слушателем фрагмента, а активити заставлять слушать этот фрагмент? Тогда в активити будет реализация кучи функций каждого фрагмента * количество кучи фрагментов. ... подробнее

Показать сообщение отдельно
YuraAAA
 Аватар для YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
23.09.2015, 15:16     Загрузка данных с удалённого сервера
Rube, а если UniversalImageLoader ? Правда я не уверен, что ему можно указывать куда сохранять, надо глянуть.
Хотя если это просто загрузчик, то можно делать просто:

Тред для закачки:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class DownloadThread implements Runnable {
 
    private String url;
    private String targetCacheFolder;
 
    public DownloadThread(String url, String targetCacheFolder) {
        this.url = url;
        this.targetCacheFolder = targetCacheFolder;
    }
 
    @Override
    public void run() {
        //TODO download image from url
    }
}
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import android.util.Log;
 
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
 
public class DownloadManager {
 
    private static String cacheFolder;
    private static BlockingQueue<String> blockingQueue = new LinkedBlockingQueue<>();
    private static Thread consumerThread;
    private static ExecutorService executorService = Executors.newFixedThreadPool(10);
 
    public static void init(String cacheFolder) {
        DownloadManager.cacheFolder = cacheFolder;
        consumerThread = new Thread(new ConsumerRunnable());
        consumerThread.start();
    }
 
    public static synchronized void stop() {
        if (consumerThread != null && !consumerThread.isInterrupted()) {
            consumerThread.interrupt();
        }
        if (executorService != null && !executorService.isShutdown()) {
            executorService.shutdownNow();
        }
    }
 
    public static void addUrl(String url) {
        try {
            blockingQueue.put(url);
        } catch (InterruptedException e) {
            Log.e("DownloadManager", "Unable to add new url", e);
        }
    }
 
    private static class ConsumerRunnable implements Runnable {
 
        @Override
        public void run() {
            while (true) {
                try {
                    String take = blockingQueue.take();
                    executorService.execute(new DownloadThread(take, cacheFolder));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
 
 
}
В чём смысл:
1. Вызываем init, передаём ему кэш директорию. Сразу запускается thread, реализуем паттер producer-consumer чтобы не было задержек.
2. Наш Consumer thread бесконечный, ждёт из коллекции новый url для закачки.
3. Получили url - через executor (в моём примере он 10-ти потоковый) запускаем Download thread.
4. Если он нам больше не нужен - вызываем stop - останавливаем consumer thread, останавливаем наш executor.
Ну это так, на быструю руку.
 
Текущее время: 06:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru