Firebase de Stockage getDownloadUrl() la méthode ne peut pas être résolu
Pour télécharger images à Firebase de Stockage je joins addOnSuccessListener
sur l'instance de la StorageReference. Tout en substituant onSuccess
méthode que j'appelle getDownloadUrl()
sur l'instance de taskSnapshot
mais il me donne un message d'erreur indiquant
Ne peut pas résoudre méthode getDownloadUrl()
Cette application que j'avais créé il y a 2 mois, plus tôt cette application fonctionnait bien, et getDownloadUrl()
fonctionnait très bien. Aussi, dans taskSnapshot
exemple quand j'appuie sur Ctrl+espace, dans les suggestions, je ne trouve pas getDownloadUrl()
méthode. Pourquoi est-ce qui se passe?
Code de onActivityResult()
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RC_SIGN_IN) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, "Signed in!!!1", Toast.LENGTH_SHORT).show();
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Failed to sign in", Toast.LENGTH_SHORT).show();
finish();
}
}
else if(requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK){
Uri selectedPhoto = data.getData();
StorageReference localRefrence = storageReference.child(selectedPhoto.getLastPathSegment());
// Uploading the file on the storage
localRefrence.putFile(selectedPhoto).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUrl = taskSnapshot.getDownloadUrl();
FriendlyMessage message = new FriendlyMessage(mUsername, null, downloadUrl.toString());
databaseReference.push().setValue(message);
}
});
}
}
- Après être passé à travers des questions, j'ai également essayé
@SuppressWarnings("VisibleForTests") Uri downloadUrl = taskSnapshot.getDownloadUrl();
mais toujours la même erreur. - Printscreen de code est vraiment une idée terrible.
- Il montre
getDownloadUrl()
en rouge c'est pourquoi j'ai ajouté qu'. - Oui, mais nous sommes incapables de copier et de reproduire, on ne va réécrire à partir d'une capture d'écran.
- Il est fortement préférable de copier votre code dans la question, au lieu de montrer une capture d'écran qui peuvent être difficiles à lire et impossible de recherche.
- ok, j'ai supprimé il. Cochez la case modifier
- Double Possible de Firebase de Stockage "extrait d'une longue durée de vie de l'URL de téléchargement" à l'aide de getDownloadUrl() maintenant obsolète
Vous devez vous connecter pour publier un commentaire.
La Firebase API a changé.
UploadTask.TaskSnapshot
a une méthode nomméegetMetadata()
qui renvoie uneStorageMetadata
objet.Ce
StorageMetadata
objet contient une méthode nomméegetReference()
qui renvoie uneStorageReference
objet.Que
StorageReference
objet contient lagetDownloadUrl()
méthode qui renvoie un objet de Tâche au lieu d'une Uri de l'objet.Cette Tâche doit ensuite être écouté afin d'obtenir l'Uri, ce qui peut être fait de manière asynchrone ou à un blocage de la manière; voir la Les tâches de l'API pour que.
getDownloadUrl()
sur l'instance deTaskSnapshot
et à cette époque il était de retourUri
mais maintenant il est de retourTask<Uri>
. - La méthode de l'invocation d'getDownloadUrl()
méthode d'obtenir le changement dans les derniers mois?onSuccess()
j'ai écritTask<Uri> downloadUri=taskSnapshot.getMetadata().getReference().getDownloadUrl(); Log.i("url:",downloadUri.getResult().toString());
mais il thowsException
'java.lang.IllegalStateException: Tâche n'est pas terminée " s'il vous Plaît aiderTasks.await(downloadUri)
avant d'appelerdownloadUri.getResult()
(mais ne faites cela que si vous êtes dans un thread d'arrière-plan!!!), ou utiliserdownloadUri.addOnCompleteListener(...)
comme indiqué dans le developers.google.com/android/guides/taskstheUri = Tasks.await(downloadUri)
parce quedownloadUri.getResult()
est seulement appelée à l'intérieur d'downloadUri.addOnCompleteListener(...)
. Elle pourrait également être appelée aprèsTasks.await(downloadUri)
, mais il n'y aurait pas besoin de le faire depuisawait
est déjà en retournant le résultat.De ne pas obtenir l'url de téléchargement de l'image à l'aide de
profileImageUrl = taskSnapshot.getDownloadUrl().toString();
cette méthode est obsolète.
Au lieu de cela, vous pouvez utiliser la méthode ci-dessous
Vous devriez essayer celui-ci. Comprendre et essayer de le mettre en œuvre dans le vôtre
La
.getDownloadURL
n'est plus disponible et obsolètes.à partir de la documentation
Task<Uri>
etgetdownloadUrl();
Récupère de façon asynchrone une longue durée de vie de l'URL de téléchargement avec un être révoquées jeton.
voir la documentation