2017-02-27 17 views
10

Mam podstawowy działający kod do pobierania pliku z magazynu Firebase.Jak skrócić okres próbny pobierania magazynu Firebase na Sieć Błąd

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

Jednakże, jeśli powyższy kod jest wykonywany, gdy urządzenie nie jest podłączone do Internetu trwa prawie 10 minut przed onFailure zdarzenie jest wreszcie wyzwolony. W dzienniku międzyczasie wypełnia się z powtarzających się prób:

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>> ] 

Czy istnieje sposób mogę skrócić (dostosować) i wywołać ponownie okres onFailure imprezę wcześniej?

Odpowiedz

7

Tak, można skonfigurować limitu czasu przesyłania, pliki do pobrania, a także innych działań przy użyciu setMaximum{OPERATION}RetryTimeMillis() metody:

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 

Zobacz the reference docs for more,