Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: cannot find symbol method getDownloadUrl() of type com.google.firebase.storage.UploadTask.TaskSnapshot

Before gradle update everything worked fine, but later on this error popped up. I have referred to the official documents and it provides the same code. Not accepting the getDownloadUrl() method

I have added the correct dependency which is latest and the gradle sync is successful. app/build.gradle

This is the sample code provided in firebase docs which is same as mine. Firebase Assistant

I'm unable to understand what could possibly go wrong even if all required things are present. Stuck on this since 2 days, please help!

like image 536
Karan Avatar asked May 27 '18 17:05

Karan


3 Answers

As Doug pointed out, UploadTask.getDownloadUrl() is deprecated, so use StorageReference.getDownloadUrl().

But StorageReference.getDownloadUrl() returns Task, which must be handled asynchronously, you cannot do Uri downloadUrl = photoRef.getDownloadUrl().getResult(); else you will get java.lang.IllegalStateException: Task is not yet complete

Therefore, handle it asynchronously like this

 photoRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        Uri downloadUrl = uri;
                        Toast.makeText(getBaseContext(), "Upload success! URL - " + downloadUrl.toString() , Toast.LENGTH_SHORT).show();
                    }
                });
like image 94
Ananth Avatar answered Oct 23 '22 02:10

Ananth


If you have a 'image_uri' and put it to the firebase storage this code will help you.

private StorageReference storageReference= FirebaseStorage.getInstance().getReference();

 final StorageReference ref = storageReference.child("picture.jpg");
    ref.putFile(image_uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    final Uri downloadUrl = uri;


                }
            });
like image 23
Thamarai Selvan Avatar answered Oct 23 '22 04:10

Thamarai Selvan


getDownloadUrl no longer exists.

So the new method is:

final StorageReference ref = storageRef.child("images/mountains.jpg");
uploadTask = ref.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 ref.getDownloadUrl();
    }
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()) {
            Uri downloadUri = task.getResult();
        } else {
            // Handle failures
            // ...
        }
    }
});

Firebase doc

like image 6
Pablo Cegarra Avatar answered Oct 23 '22 02:10

Pablo Cegarra