2017-03-14 1 views
0

Ich nehme eine Referenz von FirebaseStorage, ich möchte den Wert speichern, die eine Bild-URL ist, hier ist mein Code:Wie deklariert man den endgültigen Uri, wenn FirebaseStorage verwendet wird?

//FirebaseStorage 
       String path="firememes/"+ UUID.randomUUID()+".png"; 
       StorageReference firememeRef=storage.getReference(path); 

       StorageMetadata metadata=new StorageMetadata.Builder() 
         .setCustomMetadata("text","測試").build(); 

       Uri url; 
       UploadTask uploadTask=firememeRef.putBytes(bytes,metadata); 
       StorageTask<UploadTask.TaskSnapshot> taskSnapshotStorageTask = uploadTask.addOnSuccessListener(MainActivity.this, new OnSuccessListener<UploadTask.TaskSnapshot>() { 
        @Override 
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
         //it shows inner class , need to declared final 
         url = taskSnapshot.getDownloadUrl(); 
         Log.d("url>",url.toString()); 

        } 
       }); 

aber wenn ich bis zur endgültigen Finale Uri url ändern; es zeigt Kann kein Wert zur endgültigen Variable 'url'

Ich möchte url.toString Wert erhalten und speichern, wie Sie die globale Variable für Uri setzen, würde jede Hilfe geschätzt werden, danke im Voraus.

Antwort

2

Definieren Sie die Variable url innerhalb des Callbacks statt außerhalb des Callbacks.

String path="firememes/"+ UUID.randomUUID()+".png"; 
StorageReference firememeRef=storage.getReference(path); 

StorageMetadata metadata=new StorageMetadata.Builder() 
     .setCustomMetadata("text","測試").build(); 

UploadTask uploadTask=firememeRef.putBytes(bytes,metadata); 
StorageTask<UploadTask.TaskSnapshot> taskSnapshotStorageTask = uploadTask.addOnSuccessListener(MainActivity.this, new OnSuccessListener<UploadTask.TaskSnapshot>() { 
    @Override 
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
     //it shows inner class , need to declared final 
     Uri url = taskSnapshot.getDownloadUrl(); 
     Log.d("url>",url.toString()); 
    } 
}); 
+0

Vielen Dank für Ihre Antwort, aber ich möchte den URL-Wert von außen verwenden, so dass ich nicht die Variable URL innerhalb des Rückrufs wollen. Ich versuche endgültige Uri URL, die nicht definiert werden kann –

+0

Firebase Task Callbacks sind alle asynchron. Sie müssen Ihre Arbeit innerhalb des Rückrufs fortsetzen. –

+0

danke die Information, ich habe es jetzt –

Verwandte Themen