2017-04-04 2 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: "タスク"のタイプはFileDownloadTaskです。

+0

ダウンロードに使用している 'getXXX()'メソッド( 'getFile()'、 'getBytes()'、 'getStream()')はどちらですか? –

+0

私はgetFile()を使用しています – Jonathan

+0

'' Code.TOTAL_BYTES_TO_TRANSFER'という文字列をインテントアクションとして、そして余分な 'totalbytecount'を格納するためのキーとして使用しています。それはあなたが意図したものですか? –

答えて

1

onProgress()を初めてダウンロードする場合は、getBytesTransferred() == 0getTotalByteCount() == -1となります。その後の呼び出しでは、合計バイト数が正しいです。私はこれがバグか、単にAPIの記載されていない詳細なのかどうかはわかりません。彼らのフィードバックを得るためにFirebase Supportに報告することができます。