2017-04-04 4 views
0

Ich möchte einen Download-Fortschrittsbalken anzeigen, um dem Benutzer anzuzeigen, wie viele Bytes noch heruntergeladen werden müssen, bevor meine App mit der nächsten Aktivität fortfährt (anstatt nur einen schwarzen Bildschirm anzuzeigen). Ich habe es mit diesem Code versucht:Firebase-Download-Fortschrittsbalken

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

     }); 

aber Gesamt bytecount gibt nur -1 zurück. Was mache ich falsch?

BEARBEITEN: Die Datei existiert definitiv, da sie korrekt heruntergeladen und später in der App verwendet wird.

EDIT 2: "Task" ist vom Typ FileDownloadTask.

+0

Welche Methode 'getXXX()' ('getFile()', 'getBytes()', 'getStream()') verwenden Sie, um den Download durchzuführen? –

+0

Ich benutze getFile() – Jonathan

+0

Sie verwenden den String 'Code.TOTAL_BYTES_TO_TRANSFER' sowohl als Absichtsaktion als auch als Schlüssel zum Speichern von' totalbytecount'. Hast du das beabsichtigt? –

Antwort

1

Wenn onProgress() von einem onProgressListener für einen Download das erste Mal aufgerufen wird, getBytesTransferred() == 0 und getTotalByteCount() == -1. Bei nachfolgenden Aufrufen ist die Gesamtzahl der Bytes korrekt. Ich weiß nicht, ob das ein Fehler oder einfach ein undokumentiertes Detail der API ist. Sie können sich an Firebase Support melden, um ihre Rückmeldung zu erhalten.