web-dev-qa-db-fra.com

La méthode getDownloadUrl () de Firebase Storage ne peut pas être résolue

Pour télécharger images vers Firebase Storage , je joins addOnSuccessListener à l’instance de StorageReference . En surchargeant la méthode onSuccess, j'appelle getDownloadUrl() sur l'instance de taskSnapshot mais elle me donne une erreur en disant 

Impossible de résoudre la méthode getDownloadUrl ()

Cette application que j'avais créée il y a 2 mois, cette application fonctionnait bien et getDownloadUrl() fonctionnait également bien. En outre, dans taskSnapshot lorsque j'appuie sur Ctrl + space, dans les suggestions, je ne trouve pas la méthode getDownloadUrl(). Pourquoi ça se passe?

Code pour 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);
            }
        });
    }
}
5
neer17

L'API Firebase a changé .

23 mai 2018

Cloud Storage version 16.0.1

Suppression des méthodes obsolètes StorageMetadata.getDownloadUrl () et UploadTask.TaskSnapshot.getDownloadUrl (). Pour obtenir une URL de téléchargement en cours, utilisez StorageReference.getDownloadUr ().

UploadTask.TaskSnapshot a une méthode nommée getMetadata() qui renvoie un objet StorageMetadata.

Cet objet StorageMetadata contient une méthode appelée getReference() qui renvoie un objet StorageReference.

Cet objet StorageReference contient la méthode getDownloadUrl() , qui renvoie désormais un objet Task au lieu d'un objet Uri.

Il faut alors écouter cette tâche pour obtenir l’Uri, ce qui peut être fait de manière asynchrone ou bloquante; voir le API de tâches pour cela.

20
Daniel F
final StorageReference filePath = mImageStore.child("profile_images").child("full_image").child(userId + ".jpg");
                filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        //Bitmap hochladen
                        uploadBitMap(uri.toString());
                    }
                });
2
Nicolai Rahm

Vous n'obtiendrez pas l'URL de téléchargement de l'image maintenant en utilisant

profileImageUrl = taskSnapshot. getDownloadUrl (). toString (); cette méthode est obsolète.

Au lieu de cela, vous pouvez utiliser la méthode ci-dessous

uniqueId = UUID.randomUUID().toString();
ur_firebase_reference = storageReference.child("user_photos/" + uniqueId);

Uri file = Uri.fromFile(new File(mphotofile.getAbsolutePath()));
UploadTask uploadTask = ur_firebase_reference.putFile(file);

Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
    @Override
    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
        if (!task.isSuccessful()) {
            throw task.getException();
        }

        // Continue with the task to get the download URL
        return ur_firebase_reference.getDownloadUrl();
    }
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()) {
            Uri downloadUri = task.getResult();
            System.out.println("Upload " + downloadUri);
            Toast.makeText(mActivity, "Successfully uploaded", Toast.LENGTH_SHORT).show();
            if (downloadUri != null) {

                String photoStringLink = downloadUri.toString(); //YOU WILL GET THE DOWNLOAD URL HERE !!!!
                System.out.println("Upload " + photoStringLink);

            }

        } else {
            // Handle failures
            // ...
        }
    }
});
1
MIDHUN CEASAR

Vous devriez essayer celui-ci. Comprenez-le et essayez de le mettre en œuvre dans le vôtre

buttonSetup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String name = editText_name.getText().toString();
            if (!TextUtils.isEmpty(name) && mainImageURI != null) {
                final String user_id = firebaseAuth.getCurrentUser().getUid();
                progressBar_setup.setVisibility(View.VISIBLE);
                final StorageReference image_path = storageReference.child("profile_images").child(user_id + ".jpg");
                UploadTask uploadTask = image_path.putFile(mainImageURI);

                uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                    @Override
                    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                        if(!task.isSuccessful()){
                            throw task.getException();
                        }
                        return image_path.getDownloadUrl();
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        if (task.isSuccessful()){
                            Uri downloadUrl = task.getResult();
                            Log.i("The URL : ", downloadUrl.toString());
                        }
                    }
                });
            }
        }
    });
0
Agung Pramono