Java 无法获取上载到firebase android的图像的下载URL

Java 无法获取上载到firebase android的图像的下载URL,java,android,firebase,firebase-realtime-database,firebase-storage,Java,Android,Firebase,Firebase Realtime Database,Firebase Storage,我有一段代码,只需点击一个按钮就可以从imageview上传图像。即使图像是通过这段代码上传的,我也无法获得图像的下载url,以便将来参考。请帮助我获取下载URL。仅供参考,getDownloadURl()函数已被弃用,且不起作用。谢谢大家! Button uploadBtn = findViewById(R.id.upload_btn); uploadBtn.setOnClickListener(new View.OnClickListener() {

我有一段代码,只需点击一个按钮就可以从imageview上传图像。即使图像是通过这段代码上传的,我也无法获得图像的下载url,以便将来参考。请帮助我获取下载URL。仅供参考,
getDownloadURl()
函数已被弃用,且不起作用。谢谢大家!

    Button uploadBtn = findViewById(R.id.upload_btn);
            uploadBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    FirebaseStorage storage = FirebaseStorage.getInstance();
                    // Create a storage reference from our app
                    StorageReference storageRef = storage.getReferenceFromUrl("gs://'''''''.appspot.com/");
    
    // Create a reference to "mountains.jpg"
                    StorageReference mountainsRef = storageRef.child(System.currentTimeMillis() + ".jpg");
    
    // Create a reference to 'images/mountains.jpg'
                    StorageReference mountainImagesRef = storageRef.child("images" + System.currentTimeMillis() + ".jpg");

    // While the file names are the same, the references point to different files
                    mountainsRef.getName().equals(mountainImagesRef.getName());    // true
                    mountainsRef.getPath().equals(mountainImagesRef.getPath());    // false

                imageView.setDrawingCacheEnabled(true);
                imageView.buildDrawingCache();
                Bitmap bitmap = imageView.getDrawingCache();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                byte[] data = baos.toByteArray();

                UploadTask uploadTask = mountainsRef.putBytes(data);
                uploadTask.addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle unsuccessful uploads
                    }
                }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
                        String downloadUrl = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
                        Toast.makeText(ClickImage.this, downloadUrl, Toast.LENGTH_SHORT).show();

                    }

                });


            }
        });
按钮上传btn=findviewbyd(R.id.upload\u btn);
uploadBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
FirebaseStorage=FirebaseStorage.getInstance();
//从我们的应用程序创建存储引用
StorageReference-storageRef=storage.getReferenceFromUrl(“gs:/”.appspot.com/”;
//创建对“mountains.jpg”的引用
StorageReference mountainsRef=storageRef.child(System.currentTimeMillis()+“.jpg”);
//创建对“images/mountains.jpg”的引用
StorageReference mountainImagesRef=storageRef.child(“图像”+System.currentTimeMillis()+”.jpg”);
//虽然文件名相同,但引用指向不同的文件
mountainsRef.getName().equals(mountainsImagesRef.getName());//true
mountainsRef.getPath().equals(mountainsImagesRef.getPath());//false
imageView.setDrawingCacheEnabled(true);
buildDrawingCache();
位图Bitmap=imageView.getDrawingCache();
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
压缩(bitmap.CompressFormat.JPEG,100,baos);
字节[]数据=baos.toByteArray();
UploadTask UploadTask=mountainsRef.putBytes(数据);
uploadTask.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理不成功的上传
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//taskSnapshot.getMetadata()包含文件元数据,如大小、内容类型和下载URL。
String downloadUrl=taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
Toast.makeText(单击image.this,下载URL,Toast.LENGTH_SHORT.show();
}
});
}
});

我以前遇到过这个问题,谁能正确下载Firebase,而不是下载URL中的链接

在我搜索了这个问题之后,有一个东西叫做,它的工作方法覆盖了需要更长时间的命令,并在它完成后执行命令,当它完成后返回到它

解决此问题您可以使用此方法检索下载URL的值

                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    storageReference.getDownloadUrl().addOnCompleteListener(task -> {

                        String downloadUrl = Objects.requireNonNull(task.getResult()).toString();
    
                    });

我希望我能为您简化一些事情并帮助您。

我以前遇到过这个问题,谁可以正确下载Firebase,但不能下载下载URL中的链接

在我搜索了这个问题之后,有一个东西叫做,它的工作方法覆盖了需要更长时间的命令,并在它完成后执行命令,当它完成后返回到它

解决此问题您可以使用此方法检索下载URL的值

                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    storageReference.getDownloadUrl().addOnCompleteListener(task -> {

                        String downloadUrl = Objects.requireNonNull(task.getResult()).toString();
    
                    });

我希望我能为您简化一些事情并帮助您。

确定下载URL需要调用服务器。因此,对
getDownloadUrl()
的调用将返回一个
任务
,该任务在下载URL从服务器返回时完成。您需要对它调用
addSuccessListener()
,等待它完成。请参阅文档,确定下载URL需要调用服务器。因此,对
getDownloadUrl()
的调用将返回一个
任务
,该任务在下载URL从服务器返回时完成。您需要对它调用
addSuccessListener()
,等待它完成。请参阅文档和本文档