2017-04-04 165 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(); 
      } 

     }); 

但是,總數bytecount只返回-1。我究竟做錯了什麼?

編輯:該文件肯定存在,因爲它得到正確下載並在以後在應用程序中使用。

編輯2:「任務」是FileDownloadTask類型。

+0

您使用哪種'getXXX()'方法('getFile()','getBytes()','getStream()')來下載? –

+0

我正在使用getFile() – Jonathan

+0

您正在使用字符串'Code.TOTAL_BYTES_TO_TRANSFER'作爲一個intent動作和作爲存儲額外的'totalbytecount'的關鍵。這是你的意圖嗎? –

回答

1

當的onProgressListener下載被稱爲第一次,getBytesTransferred() == 0getTotalByteCount() == -1。在隨後的調用中,總字節數是正確的。我不知道這是一個錯誤還是僅僅是API的未公開的細節。您可以通過報告Firebase Support獲得他們的反饋。