2017-04-04 1 views
0

다운로드 진행률 표시 줄을 표시하여 내 앱이 다음 활동을 계속하기 전에 (검정색 화면 만 표시하는 대신) 다운로드 할 바이트 수를 표시하려고합니다. 이 코드로 시도했습니다 :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(); 
      } 

     }); 

하지만 총 바이트 수는 -1 만 반환합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

EDIT : 파일이 제대로 다운로드되어 나중에 응용 프로그램에서 사용되므로 확실히 존재합니다.

EDIT 2 : "task"유형은 FileDownloadTask입니다.

+0

다운로드 할 때 사용하는'getXXX()'메소드 ('getFile()','getBytes()','getStream()')는 무엇입니까? –

+0

getFile()을 사용 중입니다 – Jonathan

+0

의도적 인 동작과 여분의'totalbytecount'를 저장하기위한 키로'Code.TOTAL_BYTES_TO_TRANSFER' 문자열을 사용하고 있습니다. 그게 당신이 의도 한 것입니까? –

답변

1

의 다운로드 중 onProgress()을 처음 호출하는 경우 getBytesTransferred() == 0getTotalByteCount() == -1입니다. 후속 호출에서 총 바이트 수는 정확합니다. 이것이 버그인지 또는 단순히 API의 문서화되지 않은 세부 사항인지는 알 수 없습니다. 피드백을 받으려면 Firebase Support에 신고하십시오.