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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 67, средняя оценка - 4.78
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
#1

Скачать файл из сети на SD карту - Программирование Android

30.06.2013, 21:38. Просмотров 8885. Ответов 10
Метки нет (Все метки)

Доброго времени суток. Есть такой вопрос:

получаю ответ от сервера в виде XML-сообщения и разбираю его. Есть ссылки на файлы кот лежат на сервере (например это картинки), нужно скачать эти файлы в папку на SD карту (они будут в качестве кэша), и при следующем таком же запросе с android-приложения, сначала проверяем существование такого файла на SD-карте в нужной папке а потом если они есть - грузим с SD, а если нет то из сети.

Далеко не хочу пока копать, а для начала хочу разобраться в том, как загрузить файлы из сети на SD-карту и тут же отобразить их в activity??

p.s. я новичек в разработке android, буду очень благодарен за полезные ответы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2013, 21:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скачать файл из сети на SD карту (Программирование Android):

Не могу сохранить файл на карту - Программирование Android
Почему этот код сохраняет файл на внутреннем накопителе, вместо SD карты??? Environment.getExternalStorageDirectory().getPath() ссылается...

Не получается сохранить файл на SD карту - Программирование Android
String FILENAME = "settings"; String string = "hello world!"; File sdDir = new...

.NET 4.x скачать xml файл из сети, с условием что используется прокси сервер - C#
Добрый день, раньше пользовался парсером курса валют с сайта ЦБ: // Текущая дата string data = string.Empty; ...

скачать драйвера на карту Nvidia GeForce9500M GS turbo - Видеокарты
Нужно скачать дрова на карту Nvidia GeForce9500M GS turbo

Построить карту сети такую, что на ней виден каждый каждый коммутатор, состояние его портов, информация о вланах, топология сети - Сетевое оборудование
Здравствуйте! Собственно есть сеть из кучи коммутаторов, с вланами, QinQ, STP ну и прочими радостями. Требуется: построить карту...

Создать карту сети - C#
Ребят помогите создать карту сети. Надо так чтобы в программе в textbox выводились все доступные хосты в локальной сети. С чего начать?...

10
YuraAAA
1578 / 1319 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
05.07.2013, 20:21 #2
Для кэширования можно использовать LruCache<>. В чём именно проблема?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.07.2013, 22:44 #3
пример получения пути
Java
1
2
3
4
5
6
7
8
9
10
public static File getDiskCacheDir(Context context, String uniqueName) {
    // Check if media is mounted or storage is built-in, if so, try and use external cache dir
    // otherwise use internal cache dir
    final String cachePath =
            Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
                    !isExternalStorageRemovable() ? getExternalCacheDir(context).getPath() :
                            context.getCacheDir().getPath();
 
    return new File(cachePath + File.separator + uniqueName);
}
пример чтения
Java
1
2
3
4
5
6
7
8
9
10
11
URL yahoo = new URL("http://www.yahoo.com/");
BufferedReader in = new BufferedReader(
            new InputStreamReader(
            yahoo.openStream()));
 
String inputLine;
 
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
 
in.close();
пример записи
Java
1
2
3
4
PrintWriter pw = new PrintWriter(new FileWriter(filename));
pw.println(line);
pw.flush();
pw.close();
2
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
06.07.2013, 08:44 #4
Как новичок новичку... Зачем Вам именно кеш? Пишу программу синхронизирующуюся с сервером. Она просто качает файл в СВОЮ ПАПКУ на диск-флешку. Перед скачиванием проверяет наличие старого и может его удалить или оставить и прервать закачку - по моему желанию. Полный "ручной" контроль файлов в папке - могу проверить наличие файла, "свежий" ли файл, полностью ли скачался... Так надежнее.

Кеш может пригодится (ИМХО) для веб-технологий (картинка на странице уже была скачана один раз - незачем обновлять)
0
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
06.07.2013, 11:37  [ТС] #5
Цитата Сообщение от Tester64 Посмотреть сообщение
Перед скачиванием проверяет наличие старого и может его удалить или оставить и прервать закачку
ты же прочитай тему, поймеш чего я хочу именно:

сначала проверяем существование такого файла на SD-карте в нужной папке а потом если они есть - грузим с SD, а если нет то из сети
Добавлено через 2 минуты
Цитата Сообщение от V0v1k Посмотреть сообщение
пример получения пути
Java
1
2
3
4
5
6
7
8
9
10
public static File getDiskCacheDir(Context context, String uniqueName) {
    // Check if media is mounted or storage is built-in, if so, try and use external cache dir
    // otherwise use internal cache dir
    final String cachePath =
            Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
                    !isExternalStorageRemovable() ? getExternalCacheDir(context).getPath() :
                            context.getCacheDir().getPath();
 
    return new File(cachePath + File.separator + uniqueName);
}
пример чтения
Java
1
2
3
4
5
6
7
8
9
10
11
URL yahoo = new URL("http://www.yahoo.com/");
BufferedReader in = new BufferedReader(
            new InputStreamReader(
            yahoo.openStream()));
 
String inputLine;
 
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
 
in.close();
пример записи
Java
1
2
3
4
PrintWriter pw = new PrintWriter(new FileWriter(filename));
pw.println(line);
pw.flush();
pw.close();
у тебя здесь строка читается... А как применить это, для загрузки из InputStream в imageView и на SD-карту?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
06.07.2013, 12:39 #6
сначала проверяем существование такого файла на SD-карте в нужной папке а потом если они есть - грузим с SD, а если нет то из сети
А почему нельзя КАЖДЫЙ раз читать из сети на SD (если на SD еще нет) и работать уже с файлом с SD???
Просто не пойму зачем пользоваться "левой" папкой для кеша, когда можно выделить ФИСКИРОВАНУЮ папку на флеш-диске.

А скачать файл можно примерно так (вырезал из готового блока, удаляя свой лог и многопоточность - мог где-то ошибиться):


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
        new File("/mnt/sdcard/ToFolder").mkdir();
        Str_StoragePath = "/mnt/sdcard/ToFolder/";
        
// удаляем старый
        File f1 = new File(Str_StoragePath+FileName);
        f1.delete();
        
 
        String ULRStr = "";
        URL url;
        URLConnection connection;
        int fileLength;
        InputStream input1 = null;
        try {
                ULRStr = "http://mysite.com/get.php";
            url = new URL(ULRStr);
            connection = url.openConnection();
            connection.connect();
            fileLength = connection.getContentLength();
            input1 = new BufferedInputStream(url.openStream());
         } catch (Exception e) {
            //return " Ошибка скачивания!";
        }
 
        try {
            // download the file
            OutputStream output = new FileOutputStream(Str_StoragePath+FileName);
            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = input1.read(data)) != -1) {
                total += count;
            }
            output.flush();
            output.close();
            input1.close();
            
        } catch (Exception e) {
            return " Ошибка скачивания! "+e.toString();
        }
В инете есть похожие коды...
1
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.07.2013, 12:51 #7
битмап с потока
Java
1
Bitmap btm = BitmapFactory.decodeStream(InputStream is);
а дальше вставляем битмап в imageView.

витмап в поток
Java
1
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
Добавлено через 1 минуту
Цитата Сообщение от Tester64 Посмотреть сообщение
Просто не пойму зачем пользоваться "левой" папкой для кеша, когда можно выделить ФИСКИРОВАНУЮ папку на флеш-диске.
ага, постройте свой кеш с блекджеком и путанами...

Добавлено через 2 минуты
Tester64, недостатки вашего примера:
файлы будет видеть и сможет редактировать пользователь;
файлы не будут удаляться при удалении приложения;
файлы не будет удалять система при нехватки памяти;
не будет работать без наличия карты.

Добавлено через 2 минуты
я уже не говорю о том, что нельзя так путь на карту задавать.
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
06.07.2013, 13:07 #8
Цитата Сообщение от V0v1k Посмотреть сообщение
файлы будет видеть и сможет редактировать пользователь;
файлы не будут удаляться при удалении приложения;
файлы не будет удалять система при нехватки памяти;
не будет работать без наличия карты.
Автор хоть и упоминал кеш, но не упоминал дополнительные требования (удаление, запрет на правку)
И упомянул SD, которая вроде есть ВСЕГДА в устройстве. Хотя-бы встроенная.
А если это личные фотки, которые хочется скачать, просмотреть и хранить для правки другими редакторами.

я уже не говорю о том, что нельзя так путь на карту задавать.
У меня на 4х устройствах/планшетах разных фирм заработало
Понимаю что теоретически диски можно переименовывать, но и в настройках программы можно ЗАДАТЬ папку

А КАК путь задавать? Допустим у меня есть ОТДЕЛЬНАЯ и БОЛЬШАЯ база данных (несколько гиг), которая не поместится во встроенной памяти и не должна "случайно" удалиться.
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.07.2013, 13:14 #9
Цитата Сообщение от Tester64 Посмотреть сообщение
но не упоминал дополнительные требования (удаление, запрет на правку)
[sarcasm]
а еще он не упомянул такие требование:
приложение не должно падать;
телефон не должен взрываться при включении приложения.
[/sarcasm]

Цитата Сообщение от Tester64 Посмотреть сообщение
И упомянул SD, которая вроде есть ВСЕГДА в устройстве. Хотя-бы встроенная.
вот в случае встроенной может не работать, так как там путь другой, ну, на определенный устройствах так точно.
но встроенной может и не быть, а обычною могут и вытянуть.
Цитата Сообщение от Tester64 Посмотреть сообщение
А КАК путь задавать?
getExternalFilesDir() - External Storage
openFileOutput(FILENAME, Context.MODE_PRIVATE) - Internal Storage
http://developer.android.com/guide/topics/data/data-storage.html
1
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
07.07.2013, 14:43  [ТС] #10
Цитата Сообщение от V0v1k Посмотреть сообщение
Bitmap btm = BitmapFactory.decodeStream(InputStream is);
я чего-то не могу сделать, есть готовый пример вставки в ImageView из is?.., я уже сколько перегуглил, почему-то все примеры мёртвые.. помоги pls

хотел основываться на этом, но ничего не получилось:
http://habrahabr.ru/post/132875/
http://android-dev-notes.blogspot.com/2010/02/blog-post_24.html
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.07.2013, 15:18 #11
Java
1
imageView.setImageBitmap(btm);
1
07.07.2013, 15:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2013, 15:18
Привет! Вот еще темы с ответами:

Установил сетевую карту dlink 520tx, компьютер ее не видит и нет сети - Сетевое оборудование
здравствуйте.установил сетевую карту dlink 520tx,компьютер ее не видит и нет сети.со встроенной работает все нормально.подскажите в чем...

Комп перестал видеть сетевую карту и сетевое подключение к локальной сети - Windows
комп перестал видеть сетевую карту и сетевое подключение к локальной сети, в диспечере оборудования сетевая карта нашлась в скрытый...

Нужна программа, которая могла бы просканировать сеть домена в офисе и составить карту сети - Софт
Здравствуйте. Подскажите, пожалуйста, есть ли какая-нибудь программа, которая могла бы просканировать сеть домена в офисе и составить карту...

Как найти ссылку на файл css в html и скачать этот файл? - C#
как найти ссылку на .css в html и скачать этот файл с таким же названием? не могу найти за что зацепиться для поиска. единственное что в...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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