2016-05-23 6 views
6

Sto cercando di inserire un'immagine che ho aggiunto alla mia memoria Firebase su un dispositivo Android. Ogni volta che viene eseguito, visualizzo questo errore dal listener onFailure:FirebaseStorage che restituisce un errore sconosciuto durante la richiesta dell'immagine

E/StorageException (9646): si è verificato un errore sconosciuto, verificare il codice del risultato HTTP e l'eccezione interna per la risposta del server. E/StorageException (9646): Codice: -13000 HttpResult: 0

Ho anche modificato le autorizzazioni sull'archiviazione per avere la lettura/scrittura per il momento per assicurarsi che non sia questo il problema.

Grazie in anticipo per qualsiasi aiuto.

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

Si sta effettivamente eseguendo esattamente quel codice o si è sostituito "gs: //bucket/image.png" con il proprio "bucket" effettivo (qualcosa come "projectid.appspot.com") e il percorso dell'immagine? –

+0

Sì, l'ho sostituito con il nome e il file del mio bucket effettivo. Modificato il codice per riflettere meglio quel punto. – johnsoe

+0

Puoi indicare qual è l'eccezione interna all'interno di StorageException? Ho appena notato che httpresult è zero. Questo suggerisce che la richiesta di ottenere l'url di download non è mai stata fatta. Un modo in cui ciò può accadere è se i servizi di riproduzione non vengono aggiornati sul telefono. Saprete che questo è l'errore perché adb logcat mostrerà un errore con qualcosa sull'effetto di "Impossibile caricare il livello di rete di archiviazione". –

risposta

5

Ho appena notato che httpresult è zero. Questo suggerisce che la richiesta di ottenere l'url di download non è mai stata fatta. Un modo in cui ciò può accadere è se i servizi di riproduzione non vengono aggiornati sul telefono. Saprete che questo è l'errore perché adb logcat mostrerà un errore con qualcosa sull'effetto di "Impossibile caricare il livello di rete di archiviazione".

Per risolvere questo problema, aggiornare i servizi di riproduzione sul telefono. Ci sono alcuni modi per farlo. Trovo che il modo più semplice sia installare l'app "play services info" per vedere i servizi di riproduzione nel Play Store, quindi effettuare l'aggiornamento se disponibile.

+0

Questo era il problema! Grazie. – johnsoe

2

Ho avuto lo stesso problema, soluzione per questo è:

  • creare un riferimento bagagli ->
StorageReference storageRef = storage.getReferenceFromUrl("gs:<bucket address>"); 
  • creare un bambino per il riferimento di stoccaggio

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

0

È necessario avere fino a data servizi di Google Play per evitare questo.

Inoltre, abilitare l'autenticazione anonima nella console di Firebase.

3

Aggiorna Google Play Services sul dispositivo, non nello script gradle (anche se lo fai anche tu).

Dopo aver sbattuto la testa contro il muro per circa un'ora a causa della sola scrematura della risposta di benjamin-wulfe e di altri su internet, sono tornato indietro e l'ho letto attentamente. Spero che questo aiuti gli altri a evitare il mio errore!

0

Ho lo stesso problema durante l'utilizzo dell'esempio di archiviazione Quickbase Firebase. Il problema era che l'app non stava richiedendo autorizzazioni di runtime per l'archiviazione su Android M. Quindi prova a controllare le autorizzazioni di archiviazione.

0

Nel mio caso, stavo creando StorageRef da URL per il download non con la posizione di archiviazione .

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

Così ho cambiato reference=FirebaseStorage.getInstance().getReferenceFromUrl(downloadURL);

a

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

È necessario caricare un altro file con più dimensioni KB, questo è lavoro per me!