【问题标题】:How to use getdownloadurl in recent versions?如何在最新版本中使用 getdownloadurl?
【发布时间】:2022-01-03 06:17:21
【问题描述】:
                Uri downloaduri=taskSnapshot.getDownloadUrl();//here i cant use getdownloadurl() function
                DatabaseReference new_prod=db.push();
                new_prod.child("product name").setValue(prod_name);
                new_prod.child("product price").setValue(prod_price);
                new_prod.child("available stock").setValue(prod_quan);
                new_prod.child("product image").setValue(downloaduri);
                pd.dismiss();//fragments code

我无法使用getdownloadurl。我已经在firebase存储中存储了图像。是限制使用getdownloadurl的片段吗?我的动机是查询存储在 firebase 中。请帮助我。

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-storage


    【解决方案1】:

    在最新版本的 Firebase Storage SDK 中删除了 taskSnapshot.getDownloadUrl() 方法。您现在需要从 StorageReference 获取下载 URL。

    调用StorageReference.getDownloadUrl() 会返回Task,因为它需要从服务器检索下载 URL。所以你需要一个完成监听器来获取实际的 URL。

    来自documentation on downloading a file

     storageRef.child("users/me/profile.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            // Got the download URL for 'users/me/profile.png' in uri
            System.out.println(uri.toString());
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle any errors
        }
    });
    

    或者,如果您在上传后立即获得下载 URL(如您的情况),则第一行可能是这样:

    taskSnapshot.getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    

    另见:

    【讨论】:

      【解决方案2】:

      经过数小时的研究和不同的方式,这对我有用:

      filepath.putFile(resultUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
           @Override
           public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
      
                 //here
                 Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl();
                 while (!urlTask.isSuccessful());
                 Uri downloadUrl = urlTask.getResult();
      
                 final String sdownload_url = String.valueOf(downloadUrl);
      

      【讨论】:

        【解决方案3】:
        storageReference.child("YOUR_CHILD")
            .putFile("FILE")
            .addOnSuccessListener(new OnSuccessListener() {
               @Override
               public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                     taskSnapshot
                       .getStorage()
                       .getDownloadUrl()
                       .addOnSuccessListener(new OnSuccessListener() {
                                        @Override
                                        public void onSuccess(Uri uri) {
                                            //Put your result here
                                        }
                                    });
        
                           }   
        

        【讨论】:

          【解决方案4】:

          以下方法对我有用。

              _fbs_upload_success_listener = new OnSuccessListener<UploadTask.TaskSnapshot>() {
                      @Override
                      public void onSuccess(UploadTask.TaskSnapshot _param1) {
          
                          Task<Uri> urlTask = _param1.getStorage().getDownloadUrl();
                          while (!urlTask.isSuccessful());
                          Uri downloadUrl = urlTask.getResult();
                          String _downloadUrl = downloadUrl.toString();
             };
          

          【讨论】:

            【解决方案5】:

            这是搜索 3 小时后对我有用的 Kotlin 解决方案

             val uploadTask =
                    FirebaseStorage.getInstance().reference.child("images").child(imageName).putBytes(data)
            
                uploadTask.addOnFailureListener {
                    // Handle unsuccessful uploads
                    Toast.makeText(baseContext, "Failed to upload", Toast.LENGTH_LONG).show()
                }.addOnSuccessListener {
                    Toast.makeText(
                        baseContext, "Image uploaded",
                        Toast.LENGTH_LONG
                    ).show()
                    var downloadUrl: Uri? = null
                    FirebaseStorage.getInstance().reference.child("images")
                        .child(imageName).downloadUrl.addOnSuccessListener { it1 ->
                        downloadUrl = it1 
                      
                    }
            
            
                }
            

            downloadUrl 是您的网址

            【讨论】:

              猜你喜欢
              • 2017-05-28
              • 2018-09-25
              • 2018-07-29
              • 1970-01-01
              • 2016-07-02
              相关资源
              最近更新 更多