2016-05-23 17 views
6

Próbuję pobrać obraz, który dodałem do mojego magazynu firebase na urządzeniu z systemem Android. Za każdym razem, gdy to działa, pojawia się ten błąd od detektora onFailure:FirebaseStorage zwraca nieznany błąd podczas żądania obrazu

E/StorageException (9646): Wystąpił nieznany błąd, sprawdź kod wyniku HTTP i wewnętrzny wyjątek dla odpowiedzi serwera. E/StorageException (9646): Kod: -13000 HttpResult: 0

Zmieniłem również uprawnienia do przechowywania, aby na razie móc je czytać/zapisywać, aby upewnić się, że to nie problem.

Z góry dziękuję za pomoc.

final ImageView test = (ImageView) findViewById(R.id.test_image); 
StorageReference ref = storage.getReferenceFromUrl("gs://my-project.appspot.com/test_image.png"); 
    ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { 
     @Override 
     public void onSuccess(Uri uri) { 
      Log.d(TAG, "Successfully loaded uri"); 
      test.setImageURI(uri); 
     } 
    }).addOnFailureListener(new OnFailureListener() { 
     @Override 
     public void onFailure(@NonNull Exception e) { 
      Log.d(TAG, "Failed loaded uri: " + e.getMessage()); 
     } 
    }); 
+0

Czy rzeczywiście działa dokładnie ten kod, lub masz zastąpione „gs: //bucket/image.png” rzeczywistą „wiadra” (coś jak „projectid.appspot.com”) oraz ścieżkę do obrazu? –

+0

Yea Wymieniłem że z moją rzeczywistą nazwę pliku i wiadro. Edytował kod, aby lepiej odzwierciedlał ten punkt. – johnsoe

+0

Czy można wskazać, jaki wyjątek wewnętrzny znajduje się w wyjątku StorageException? Po prostu zauważyłem, że httpresult wynosi zero. Sugeruje to, że prośba o pobranie adresu URL nigdy nie została wykonana. Jednym ze sposobów jest to, że usługi odtwarzania nie są aktualizowane w telefonie. Poznasz to jest błąd, ponieważ adb logcat pokaże błąd z czymś do skutku „Przechowywanie warstwy sieciowej nie można załadować”. –

Odpowiedz

5

Właśnie zauważyłem, że wynik jest zerowy. Sugeruje to, że prośba o pobranie adresu URL nigdy nie została wykonana. Jednym ze sposobów jest to, że usługi odtwarzania nie są aktualizowane w telefonie. Będziesz wiedział, że to błąd, ponieważ adb logcat pokaże błąd z czymś, co "nie można załadować warstwy sieciowej".

Aby to naprawić, zaktualizuj usługi odtwarzania w telefonie. Jest kilka sposobów na zrobienie tego. Najłatwiej jest zainstalować aplikację "informacje o usługach odtwarzania", aby zobaczyć usługi odtwarzania w sklepie Play, a następnie pobrać aktualizację, jeśli jest dostępna.

+0

To był problem! Dziękuję Ci. – johnsoe

2

miałem ten sam problem, rozwiązanie to:

  • utworzyć odwołanie Storage ->
StorageReference storageRef = storage.getReferenceFromUrl("gs:<bucket address>"); 
  • stworzyć dziecku na odniesienie pamięci

StorageReference spaceRef = storageRef.child("child name");

0

Trzeba mieć aktualne usługi Google Play, aby tego uniknąć.

Włącz także anonimowe uwierzytelnianie w konsoli firebase.

3

Zaktualizuj Usługi Google Play na swoim urządzeniu, a nie w swoim gradle script (chociaż zrób to również).

Po tym, jak uderzyłem głową o ścianę przez około godzinę, bo tylko szumiąłem o odpowiedzi Beniamina Wulfe'a, a także innych w Internecie, wróciłem i przeczytałem ją uważnie. Mam nadzieję, że to pomoże innym uniknąć mojego błędu!

0

Mam ten sam problem, gdy korzystam z przykładowej pamięci masowej quickstart firebase. Problem polegał na tym, że aplikacja nie żądała uprawnień runtime do przechowywania w Androidzie M. Więc spróbuj sprawdzić uprawnienia do przechowywania.

0

W moim przypadku stworzyłem StorageRef z Pobierz URL nie z Miejsce przechowywania.

String storageLocation="gs://bbeplayer.appspot.com/heart.png"; 
    String downloadURL="https://firebasestorage.googleapis.com/v0/b/bbeplayer.appspot.com/o/heart.png?alt=media&token=41a22961-daf1-433e-a580-e65144d34ab3"; 
    StorageReference reference; 
reference=FirebaseStorage.getInstance().getReferenceFromUrl(downloadURL); 

Więc zmieniłem reference=FirebaseStorage.getInstance().getReferenceFromUrl(downloadURL);

do

reference=FirebaseStorage.getInstance().getReferenceFromUrl(storageLocation); 
-1

Musisz przesłać plik z inną bardziej rozmiarze KB, to jest to praca dla mnie!

Powiązane problemy