Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Air - файл не хочет сохраняться (http://www.flasher.ru/forum/showthread.php?t=186240)

Error202 30.10.2012 13:41

Air - файл не хочет сохраняться
 
Есть необходимость скачать mp4 файл из сети и сохранить его на SD, если нет возможности, то в AppStorage

urlloader - скачивает, судя по progressBar, нормально
А вот при сохранении, на onLoadFileComplete, приложение на Android 2.3 вылетает, 4.0.1 - виснет, точнее ощущение, что onLoadFileComplete не отрабатывет... На компьютере сохраняет без проблем.

Что может быть не так в onLoadFileComplete?

P.S. Путь /sdcard/myapp - существует, /myapp - в AppStorage тоже существует


Код:
Код AS3:

--- CUT --------------
 
var urlLoader = new urlURLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.addEventListener(ProgressEvent.PROGRESS, onLoadFileProgress);
urlLoader.addEventListener(Event.COMPLETE, onLoadFileComplete);
urlLoader.load(new URLRequest('http://server.ru/file.mp4'));
 
--- CUT --------------
 
public function onLoadFileComplete(e:Event):void{
        var pathMP4:String;
    trace("File loaded");
        // Получаем имя файла
        var fileN:File=new File((e.target as urlURLLoader).urlRequest.url);
        var fname:String = fileN.name;
        // Папка на SDCard
        var folder:File = File.documentsDirectory.resolvePath("/sdcard/myapp");
        var file:File;
        // Если папка не найдена yна SD
        if (!folder.exists) {       
                folder = File.applicationStorageDirectory.resolvePath("myapp");
                pathMP4='myapp';
                file = File.applicationStorageDirectory.resolvePath(pathMP4+"/"+fname);
        }
        else {
                pathMP4='/sdcard/myapp';
                file = File.documentsDirectory.resolvePath(pathMP4+"/"+fname);
        }
        if (folder.exists) {
            var fileStream:FileStream = new FileStream();
            fileStream.openAsync(file, FileMode.WRITE);               
            fileStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, outputProgressHandler);
            fileStream.addEventListener(Event.CLOSE, onVideoSaveClose);
                fileStream.writeBytes(e.target.data);
            fileStream.close();
        }
        else {
                trace('Cant find save folder');
        };
};
 
--- CUT --------------


GBee 30.10.2012 13:52

Подпишитесь на события ошибок, да посмотрите

Error202 30.10.2012 13:55

Да я не особенно спец... Как посмотреть при запущенном приложении на Android?

GBee 30.10.2012 15:06

Создать текстовое поле, да в него лог пихать вместо трейса. Или найти готовые логгеры.

Error202 30.10.2012 15:36

Разобрался с отладкой... Есть встроенный отладчик...

Залепил везде перехват ошибок... Но приложение вылетает раньше, чем отрабатывает ошибка...

GBee 30.10.2012 15:57

Оберните в try catch предполагаемое место падения? Может исключение. Ну вывод туда же

Error202 30.10.2012 16:25

А попробую.. Спасибо...

P.S. Доковырялся до того, что уже начал сохраняться файл нулевой длины...
p.p.s. при этом таким же образом нормально скачиваются xml и мелкие картинки



Попробовал... Тишина...
Просто закрывается и все... :(
Но файл 0Кб создать успевает

DaFive 30.10.2012 16:32

Вы его асинхронно пишете. Поэтому делайте filestream.close после завершения записи.

Error202 30.10.2012 17:26

Это я тут ошибся... Осталось после тестов... И с Async и без пробовал.. С тем же результатом...
Может есть какой-нть пример скачивания и сохранения больших файлов на AS3 Air?

DaFive 30.10.2012 17:33

target.data - ByteArray ?


Часовой пояс GMT +4, время: 01:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.