Индикатор загрузки загрузки Firebase

Я хочу показать индикатор выполнения загрузки, чтобы показать пользователю, сколько байтов осталось загрузить до того, как мое приложение перейдет к следующему действию (вместо того, чтобы показывать только черный экран). Я попытался это с этим кодом:

task.addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
            private float previouslyTransferedBytes = 0;
            private boolean firstProgress = true;
            @Override
            @SuppressWarnings("VisibleForTests")
            public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {
                //update total bytes to download
                if(firstProgress){
                    Intent totalBytesToDownloadIntent = new Intent(Code.TOTAL_BYTES_TO_TRANSFER);
                    float totalbytecount = taskSnapshot.getTotalByteCount();
                    totalBytesToDownloadIntent.putExtra(Code.TOTAL_BYTES_TO_TRANSFER,totalbytecount);
                    GlobalVars.applicationContext.sendBroadcast(totalBytesToDownloadIntent);
                    firstProgress = false;
                }
                float newlyTransfered = taskSnapshot.getBytesTransferred()-previouslyTransferedBytes;
                Intent downloadProgress = new Intent(Code.DOWNLOAD_PROGRESS);
                downloadProgress.putExtra(Code.BYTES_TRANSFERED,newlyTransfered);
                GlobalVars.applicationContext.sendBroadcast(downloadProgress);
                previouslyTransferedBytes = taskSnapshot.getBytesTransferred();
            }

        });

но итоговое bytecount возвращает только -1. Что я делаю неправильно?

РЕДАКТИРОВАТЬ: файл определенно существует, поскольку он правильно загружается и используется позже в приложении.

РЕДАКТИРОВАТЬ 2: "задача" имеет тип FileDownloadTask.

1 ответ

Решение

Когда onProgress() из onProgressListener для загрузки называется первый раз, getBytesTransferred() == 0 а также getTotalByteCount() == -1, При последующих вызовах общее количество байтов является правильным. Я не знаю, является ли это ошибкой или просто недокументированной деталью API. Вы можете сообщить в службу поддержки Firebase, чтобы получить их отзывы.

Другие вопросы по тегам