Firebase内容 - 如何从onSuccess()方法外部访问taskSnapshot.getDownloadUrl()

时间:2018-02-18 23:40:19

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

我目前正在使用Firebase将图片上传到Android Studio中的Firebase内容。文件成功上传后,我会使用taskSnapshot.getDownloadUrl()收到上传图片的网址。我想将此URL放在Firebase实时数据库中作为参考。我正在努力从taskSnapshot.getDownloadUrl()方法之外访问onSuccess()。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我们了解您要将上传的图片网址放入Firebase数据库。

您可以做的是,声明String类型的全局变量

private String imageUrl;

然后在onSuccess()方法中获取图像的url并存储在字符串

imageUrl = taskSnapshot.getDownloadUrl().toString();

然后在上传图像后,您将图像URL作为字符串,所以只需将其推送到数据库

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("ImageUrl").setValue(imageUrl);

答案 1 :(得分:0)

# declare variable like below:
    String Storage_Path = "Image_Uploads/";
    String Database_Path = "All_Image_Uploads_Database";
 # declare firebase storage or real time database  variable like below : 
    StorageReference myrefrence;
    DatabaseReference databaseReference;

  myrefrence = FirebaseStorage.getInstance().getReference();     
        databaseReference = FirebaseDatabase.getInstance().getReference(Database_Path);

 public void UploadImageFileToFirebaseStorage(Uri FilePathUri) {
        // Checking whether FilePathUri Is empty or not.
        if (FilePathUri != null) {
            // Setting progressDialog Title.
           // progressDialog.setTitle("Image is Uploading...");
            // Showing progressDialog.
           // progressDialog.show();
            // Creating second StorageReference.
            StorageReference storageReference2nd = myrefrence.child(Storage_Path + System.currentTimeMillis() + "." + GetFileExtension(FilePathUri));

            // Adding addOnSuccessListener to second StorageReference.
            storageReference2nd.putFile(FilePathUri)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            // Getting image name from EditText and store into string variable.
                            //String TempImageName = ImageName.getText().toString().trim();
                            // Hiding the progressDialog after done uploading.
                           // progressDialog.dismiss();
                            // Showing toast message after done uploading.
                            //Toast.makeText(getApplicationContext(), "Image Uploaded Successfully ", Toast.LENGTH_LONG).show();

                            @SuppressWarnings("VisibleForTests")
                            ImageUploadInfo imageUploadInfo = new ImageUploadInfo("",taskSnapshot.getDownloadUrl().toString());
                            // Getting image upload ID.
                            String ImageUploadId = databaseReference.push().getKey();
                            // Adding image upload id s child element into databaseReference.
                            databaseReference.child(ImageUploadId).setValue(imageUploadInfo);
                        }
                    })
                    // If something goes wrong .
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            // Hiding the progressDialog.
                            //progressDialog.dismiss();
                            // Showing exception erro message.
                           // Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
                        }
                    })

                    // On progress change upload time.
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            // Setting progressDialog Title.
                            //progressDialog.setTitle("Image is Uploading...");
                        }
                    });
        } else {
            //Toast.makeText(MainActivity.this, "Please Select Image or Add Image Name", Toast.LENGTH_LONG).show();

        }
    }

    // Creating Method to get the selected image file Extension from File Path URI.
    public String GetFileExtension(Uri uri) {
        ContentResolver contentResolver = getContentResolver();
        MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
        // Returning the file Extension.`enter code here`
        return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));

    }