Не удалось запустить метод taskSnapshot.getDownloadUrl()

private void uploadImageToFirebaseStorage() {
    StorageReference profileImageRef =
        FirebaseStorage.getInstance().getReference("profilepics/" + System.currentTimeMillis() + ".jpg");

    if (uriProfileImage != null) {
        progressBar.setVisibility(View.VISIBLE);
        profileImageRef.putFile(uriProfileImage)
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
                    progressBar.setVisibility(View.GONE);
                    profileImageUrl = taskSnapshot.**getDownloadUrl**().toString();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    progressBar.setVisibility(View.GONE);
                    Toast.makeText(ProfileActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
    }
}

taskSnapshot.getDownloadUrl() не работает, появляется красная линия под ним

Ответы

Ответ 1

В Firebase Storage API версии 16.0.1, метод getDownloadUrl(), использующий объект taskSnapshot, изменился. Теперь вы можете использовать,

taskSnapshot.getMetadata().getReference().getDownloadUrl().toString()

чтобы получить URL загрузки из хранилища Firebase.

Ответ 2

Чтобы получить путь imageUrl из хранилища, используйте этот код:

uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        if (taskSnapshot.getMetadata() != null) {
            if (taskSnapshot.getMetadata().getReference() != null) {
                Task<Uri> result = taskSnapshot.getStorage().getDownloadUrl();
                result.addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        String imageUrl = uri.toString();
                        //createNewPost(imageUrl);
                    }
                });
            }
        }
    }});

это все 😉

ПРИМЕЧАНИЕ. Не забудьте инициализировать StorageReference и UploadTask в своем методе uploadFile.

Ответ 3

Попробуйте с помощью этого загрузить изображение из хранилища FireBase

Варианты библиотек FireBase 16.0.1

Task<Uri> result = taskSnapshot.getMetadata().getReference().getDownloadUrl();
result.addOnSuccessListener(new OnSuccessListener<Uri>() {
      @Override
      public void onSuccess(Uri uri) {
             String photoStringLink = uri.toString();
      }
});

Ответ 4

Я использую Firebase Storage API версии 16.0.5, и на задачу нужно ссылаться как

 someTask.getResult().getMetadata().getReference().getDownloadUrl().toString();

надеюсь это поможет!

Ответ 5

Мои плагины Google Firebase в build.gradle(Module: app):

implementation 'com.firebaseui:firebase-ui-database:3.3.1'
implementation 'com.firebaseui:firebase-ui-auth:3.3.1'
implementation 'com.google.firebase:firebase-core:16.0.0'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1'
implementation 'com.google.firebase:firebase-storage:16.0.1'

build.gradle (проект):

 classpath 'com.google.gms:google-services:3.2.1'

Моя функция upload() и выборка загруженных данных из хранилища Firebase:

private void upload() {
    if (filePath!=null) {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();

        final StorageReference ref = storageReference.child(new StringBuilder("images/").append(UUID.randomUUID().toString()).toString());
        uploadTask = ref.putFile(filePath);

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

                return ref.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                    progressDialog.dismiss();
                    // Continue with the task to get the download URL
                    saveUrlToCategory(downloadUri.toString(),categoryIdSelect);
                } else {
                    Toast.makeText(UploadWallpaper.this, "Fail UPLOAD", Toast.LENGTH_SHORT).show();
                }
            }
        }).addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                progressDialog.setMessage("Uploaded: ");
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                progressDialog.dismiss();
                Toast.makeText(UploadWallpaper.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

ДЛЯ ТОГО, КОТОРЫЕ ИСПОЛЬЗУЮТ ПОСЛЕДНЮЮ ВЕРСИЮ FIREBASE taskSnapshot.getDownloadUrl(), DEPRECATED или OBSOLETE !!

Ответ 6

Я столкнулся с подобной ошибкой, которую я решил этим методом. Надеюсь, поможет

uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Task<Uri> task = taskSnapshot.getMetadata().getReference().getDownloadUrl();
                task.addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        String photoLink = uri.toString();
                        Map userInfo = new HashMap();
                        userInfo.put("profileImageUrl", photoLink);
                        mUserDatabase.updateChildren(userInfo);
                    }
                });
                finish();
                return;
            }
        });

Ответ 7

taskSnapshot.**getDownloadUrl**().toString(); //deprecated and removed

используйте приведенный ниже код для загрузки Url

final StorageReference profileImageRef= FirebaseStorage.getInstance().getReference("profilepics/" + "abc_10123" + ".jpg");

profileImageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>()
        {
            @Override
            public void onSuccess(Uri downloadUrl) 
            {                
               //do something with downloadurl
            } 
        });

Ответ 8

Вы не получите URL-адрес загрузки изображения, используя

profileImageUrl = taskSnapshot.**getDownloadUrl**().toString();

этот метод устарел.

Вместо этого вы можете использовать метод ниже

    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
                // ...
            }
        }
    });

Ответ 9

//upload button onClick
public void uploadImage(View view){
    openImage()
}

private Uri imageUri;

ProgressDialog pd;

//Call open Image from any onClick Listener
private void openImage() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(intent,IMAGE_REQUEST);
}

private void uploadImage(){
    pd = new ProgressDialog(mContext);
    pd.setMessage("Uploading...");
    pd.show();

    if (imageUri != null){
        final StorageReference fileReference = storageReference.child(userID
                + "."+"jpg");

        // Get the data from an ImageView as bytes
        _profilePicture.setDrawingCacheEnabled(true);
        _profilePicture.buildDrawingCache();

        //Bitmap bitmap = ((BitmapDrawable) _profilePicture.getDrawable()).getBitmap();

        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
        } catch (IOException e) {
            e.printStackTrace();
        }

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
        byte[] data = baos.toByteArray();

        UploadTask uploadTask = fileReference.putBytes(data);
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle unsuccessful uploads
                pd.dismiss();
                Log.e("Data Upload: ", "Failled");
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                // taskSnapshot.getMetadata() contains file metadata such as size, content-type, etc.
                // ...
                Log.e("Data Upload: ", "success");
                Task<Uri> result = taskSnapshot.getMetadata().getReference().getDownloadUrl();
                result.addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        String downloadLink = uri.toString();
                        Log.e("download url : ", downloadLink);
                    }
                });

                pd.dismiss();

            }
        });

    }else {
        Toast.makeText(getApplicationContext(),"No Image Selected", Toast.LENGTH_SHORT).show();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Bitmap bitmap = null;
    if (requestCode == IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null){
        imageUri = data.getData();
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri);
            _profilePicture1.setImageBitmap(bitmap);
            _profilePicture1.setDrawingCacheEnabled(true);
            _profilePicture1.buildDrawingCache();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (uploadTask != null && uploadTask.isInProgress()){
            Toast.makeText(mContext,"Upload in Progress!", Toast.LENGTH_SHORT).show();
        }
        else {
            try{
                uploadImage();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

Ответ 10

 ref.putFile(filePath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                        taskSnapshot.getStorage().getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
                            @Override
                            public void onComplete(@NonNull Task<Uri> task) {
                                changeProfilePic(String.valueOf(task.getResult()));//gives image or file string url
                            }
                        });

попробуйте этот код будет работать наверняка

Ответ 11

для последней версии попробуйте

profileImageUrl = taskSnapshot.getStorage().getDownloadUrl().toString();

Ответ 12

Попробуйте использовать это:

taskSnapshot.getMetadata().getReference().getDownloadUrl().toString()

Ответ 13

Только это... taskSnapshot.getStorage(). GetDownloadUrl();

                            Task<Uri> result = taskSnapshot.getStorage().getDownloadUrl();
                        result.addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {
                                String photoStringLink = uri.toString();
                                mDatavaseRef.push().setValue(photoStringLink);
                            }
                        });

Ответ 14

Библиотека FirebaseStorage версии 19.0.1 работает с

String download_image_path = task.getResult().getUploadSessionUri().toString();

Ответ 15

У меня все еще есть эта ошибка. Что может быть неправильным? Я уже изменил разрешения, а пользователи анонимны.

enter image description here