android - taskSnapshot.getDownloadUrl() पदावनत है




firebase firebase-storage (6)

अपने uploadTask के लिए इस कार्यान्वयन का उपयोग करें और काम करेंगे। :)

uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl();
                firebaseUri.addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {

                        String url = uri.toString();
                        Log.e("TAG:", "the url is: " + url);

                        String ref = yourStorageReference.getName();
                        Log.e("TAG:", "the ref is: " + ref);
                    }
                });
            }
        });

अब तक, Firebase में स्टोरेज पर फ़ाइल से url प्राप्त करने का तरीका, मैं इस taskSnapshot.getDownloadUrl को करता था। taskSnapshot.getDownloadUrl , लेकिन आजकल कुछ नहीं है, मुझे किस विधि का उपयोग करना चाहिए?


आप StorageReference.getDownloadUrl() उपयोग कर सकते हैं। कृपया ध्यान दें कि यह एक टास्क लौटाता है, इसलिए आपको इसे अतुल्यकालिक रूप से इलाज करने के लिए याद रखना होगा जैसे आप किसी अन्य कार्य को करते हैं।


जैसा कि डग कहते हैं, आपको इसे एक टास्क के अंदर चलाने की आवश्यकता होगी

यहाँ एक संकेत है कि आपको इसे कैसे लागू करने की आवश्यकता है

final StorageReference ref = storageRef.child("your_REF");
uploadTask = ref.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 ref.getDownloadUrl();
        }
    }).addOnCompleteListener(new OnCompleteListener<Uri>() {
        @Override
        public void onComplete(@NonNull Task<Uri> task) {
            if (task.isSuccessful()) {
                Uri downloadUri = task.getResult();
                String downloadURL = downloadUri.toString();
            } else {
                // Handle failures
                // ...
            }
        }
    });

इसे कैसे लागू किया जाए, इसके बारे में अधिक जानकारी के लिए, आप इस github प्रश्न को देख सकते हैं, जिसे 7 दिनों के बाद खोला गया था जब मैंने इसका जवाब दिया https://github.com/udacity/and-nd-firebase/issues/41


नीचे कोड जोड़ें:

Task<Uri> downUrl=taskSnapshot.getMetadata().getReference().getDownloadUrl();
Log.i("url:",downUrl.getResult().toString());

Ref.putFile (uriImage) के बजाय बस एक कार्य का उपयोग करें .addOnSuccessListener (नया OnSuccessListener () आजकल, Firebase संदर्भ Uploadtask ऑब्जेक्ट्स का उपयोग करने का सुझाव देते हैं

मैंने इसे इस तरह किया है:

UploadTask uploadTask;
        uploadTask = storageReferenceProfilePic.putFile(uriProfileImage );

        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 storageReferenceProfilePic.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    progressBarImageUploading.setVisibility(View.GONE);
                    Uri downloadUri = task.getResult();
                    profileImageUrl = downloadUri.toString();
                    ins.setText(profileImageUrl);
                } else {
                    // Handle failures
                    // ...
                }
            }
        });

उपरोक्त पंक्तियों में इन पंक्तियों पर ध्यान दें:

Uri downloadUri = task.getResult();
profileImageUrl = downloadUri.toString();

अब profileImageUrl में " http: // adressofimage " जैसा कुछ है, जो छवि को दिखाने के लिए यूआरएल है

अब आप स्ट्रिंग प्रोफाइल का उपयोग करने के लिए स्वतंत्र हैं। फिर भी आप चाहें। उदाहरण के लिए, ग्लाइड या फ्रेस्को पुस्तकालयों का उपयोग करके एक ImageView में url लोड करें।


//Create an instance of StorageReference first (here in this code snippet, it is storageRef)  

StorageReference filepath = storageRef.child("images.jpg");

 //If file exist in storage this works.
 filepath.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
                            @Override
                            public void onComplete(@NonNull Task<Uri> task) {
                                String downloadUrl = task.getResult().toString();
                                // downloadurl will be the resulted answer
                             }
 });




firebase-storage