首页 > 解决方案 > 从firebase上传字符串方法返回图像URL

问题描述

您好,我正在尝试在图像上传后从 Firebase 存储中检索图像 URL,并将其显示在图像上传方法的 Toast 中,该方法会将 URL 作为字符串返回。

我能够获取 URL,但我的 toast 在图像上传完成之前运行,因此返回一个空字符串响应来代替 URL。

我想要实现的是获取图像URL,然后如果上传成功,则将其显示在Upload方法之外的toast中

这是我尝试过的;

      insertImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(TestFirebaseImageUpload.this,  firebaseImageUpload(filePath), Toast.LENGTH_SHORT).show();
            }
        });

单击 insertImage 按钮时,它会显示一个 toast,其中应包含通过将文件 uri 发送到 firebaseImageUploadMethod 获得的图像的 URL。

这是我的 firebaseImage 上传方法

    public String firebaseImageUpload(Uri filePath) {
        if (filePath != null) {
            // Setting progressDialog Title.
            progressDialog = new ProgressDialog(this);
            progressDialog.setTitle(" Uploading...");
            progressDialog.show();

            ref = imagePath.child("images/" + UUID.randomUUID().toString());
            ref.putFile(filePath)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            progressDialog.dismiss();
                            Toast.makeText(TestFirebaseImageUpload.this, "Uploaded ... ", Toast.LENGTH_SHORT).show();
                            ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    URL = uri.toString();
                                }
                            });
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            progressDialog.dismiss();
                            URL = "";
                            Toast.makeText(TestFirebaseImageUpload.this, "Not Uploaded ... ", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                            progressDialog.setMessage("Uploaded " + (int) progress + "%");
                        }
                    });
        }
        return URL;
    }

我想要的是在单击 insertImage 按钮时显示的 toast 中显示 URL。

谢谢

标签: javaandroidfirebase

解决方案


您可以设置回调

onClick(){
      firebaseImageUpload(filePath, Callback)
    }

    onUploaded(){
      // Display toast here
    }

ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
    URL = uri.toString(); 
    callback.onUploaded(URL);
    }
    });

     interface Callback{
       void onUploaded(String url)
     }

推荐阅读