обновить индикатор выполнения с загрузкой Firebase

Я попытался добавить индикатор выполнения для загрузки файлов в firebase. но, к сожалению, это не указывает на ход загрузки. как logcat, так и индикатор выполнения показывают только, когда файл достиг 100%

   uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                double progress = 100.0 * (taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                System.out.println("Upload is " + progress + "% done");
            int currentprogress = (int) progress;
                progressBar.setProgress(currentprogress);
            }
        }).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
                System.out.println("Upload is paused");
            }
        });

person APP Bird    schedule 09.07.2016    source источник
comment
Индикатор выполнения срабатывает с шагом 256 КБ. Поэтому, если ваш файл меньше 256 КБ, он будет скачок с 0% до 100% за одно обновление.   -  person Frank van Puffelen    schedule 09.07.2016
comment
Я пробовал файлы размером 2 МБ, 4 МБ, загрузка обновлений журнала cat выполняется на 0% примерно 5 или 6 раз. но номер не уличает и не обновляет индикатор выполнения   -  person APP Bird    schedule 09.07.2016
comment
@FrankvanPuffelen есть ли способ запустить прослушиватель ниже 256 КБ ???   -  person Vikash Sharma    schedule 14.02.2018
comment
есть ли решение, которое может отслеживать увеличение загрузки файла размером менее 256 КБ?   -  person SAKhan    schedule 30.03.2018


Ответы (2)


Измените группировку терминов в вашем расчете progress, чтобы принудительно преобразовать в число с плавающей запятой. Как и ваш код сейчас, вы делите два длинных. Результатом деления будет 0 до getBytesTransferred() == getTotalByteCount(), затем будет 1.

 double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
person Bob Snyder    schedule 09.07.2016
comment
Ой... это глупая ошибка в примере кода. Я сделал заметку, чтобы исправить это. - person Frank van Puffelen; 14.07.2016
comment
@FrankvanPuffelen Сэр, я уже сообщал о проблеме на code.google.com/ p/android/issues/detail?id=215428 - person Chintan Soni; 14.07.2016
comment
стиль индикатора выполнения горизонтальный? - person coderpc; 26.04.2017
comment
@ nivla360 Опубликуйте свой код и вывод ошибок как новый вопрос - person Bob Snyder; 28.04.2019

Когда вы отправляете данные в хранилище, вы можете наблюдать за ходом загрузки.

let uploadTask = profileRef.putData(data, metadata: metadata) { (metadata, error) in
     if let error = error {
              // Awesome error handling 
     }
}

Теперь, когда вы начали отправлять данные, наблюдайте за изменениями. Полученный снимок имеет свойство fractionCompleted. Вы можете установить индикатор выполнения с минимальным и максимальным значением 0 и 1 и установить значение на значение завершенной фракции. Или, если вы предпочитаете, просто покажите процент загрузки по мере ее возврата.

task.observe(.progress, handler: { (snap) in
   print("Our upload progress is: \(String(describing: snap.progress?.fractionCompleted))")
})
person Austin Betzer    schedule 20.06.2019