2017-02-27 1 views
10

Ich habe grundlegende Arbeitscode zum Herunterladen von Datei aus Firebase-Speicher.Wie verkürzen Firebase Speicher-Download-Wiederholungszeitraum auf Netzwerkfehler

String key = "gs://.../test.jpg"; 
File file = new File(getCacheDir() + File.separator + "test.jpg"); 

FirebaseStorage storage = FirebaseStorage.getInstance(); 
StorageReference gsRef = storage.getReferenceFromUrl(key); 

gsRef.getFile(file) 
.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() 
{ 
    @Override 
    public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) 
    { 
     Log.d("APP", "onSuccess"); 
    } 
}).addOnFailureListener(new OnFailureListener() 
{ 
    @Override 
    public void onFailure(@NonNull Exception exception) 
    { 
     Log.d("APP", "onFailure: ", exception); 
    } 
}); 

Wenn jedoch obiger Code ausgeführt wird, während das Gerät nicht mit dem Internet verbunden ist, dauert es fast 10 Minuten vor onFailure Ereignisse schließlich ausgelöst wird. In der Zwischenzeit Protokoll wird mit wiederholten Wiederholungen füllt:

02-27 21:41:07.203 12954-13288/com.example.test E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.FirebaseException: An internal error has occurred. [ <<Network Error>> ] 
02-27 21:41:08.244 12954-13288/com.example.test W/ExponenentialBackoff: network unavailable, sleeping. 
02-27 21:41:08.294 12954-13288/com.example.test E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.FirebaseException: An internal error has occurred. [ <<Network Error>> ] 
02-27 21:41:09.405 12954-13288/com.example.test W/ExponenentialBackoff: network unavailable, sleeping. 
02-27 21:41:09.485 12954-13288/com.example.test E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.FirebaseException: An internal error has occurred. [ <<Network Error>> ] 

Gibt es eine Möglichkeit kann ich (fertigen) wiederholen Zeitraum verkürzen und onFailure Ereignis früher auslösen?

Antwort

7

Ja, können Sie das Timeout für Uploads, Downloads konfigurieren und andere Operationen mit den setMaximum{OPERATION}RetryTimeMillis() Methoden:

FirebaseStorage storage = FirebaseStorage.getInstance(); 
storage.setMaxDownloadRetryTimeMillis(60000); // wait 1 min for downloads 
storage.setMaxOperationRetryTimeMillis(10000); // wait 10s for normal ops 
storage.setMaxUploadRetryTimeMillis(120000); // wait 2 mins for uploads 

Siehe the reference docs for more,