Skip to content Skip to sidebar Skip to footer

Retrieve Images From Firebase Storage In Form Of Arraylist Or A List Then Send It To Firestore Which Later Can Be Retrieved To Populate Multiple Img

these are the references defined below; StorageReference strgRef; FirebaseFirestore mfirestore; ArrayList files,status; List downloadedimages; RecyclerV

Solution 1:

    StorageReference upload = strgRef.child("newimages").child(filename);
      upload.putFile(fileuri)
                        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_LONG).show();
    
    
                                Task<Uri> downloadUrl = strgRef.child("newimages").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                    @Override
                                    public void onSuccess(Uri uri) {
                              final String imagesREf = uri.toString();
                                          
                           //here, directly store uri in firebase database or in firestore.   
                                        
                           mDatabaseRef.child("childName").setValue(imagesREf);

                          //or if you have model class use that to store in database


                                    UploaModel upload = new UploadModel("imageUrl",
                                        imagesREf);


                                    mDatabaseRef.child("childName").setValue(upload);
                                    }
                                });
    
    
    
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(UploadMake.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        });

enter image description here


Solution 2:

The thing is to iterate through a hasp map that is to store Arraylist in a hashmap this code below is adding each image url to "savedimagesurl"

 private void uploadImages(View v) {
    if((imagesList.size() != 0)) {
        final ProgressDialog progressDialog =new ProgressDialog(this);
        progressDialog.setMessage("uplaoded 0/" + imagesList.size());
        progressDialog.setCanceledOnTouchOutside(false);
        progressDialog.setCancelable(false);
        progressDialog.show();
        final StorageReference storageReference = storage.getReference();
        for(int i= 0; i<imagesList.size();i++){
            final int index = i;
            storageReference.child("UserImages/").child(imagesList.get(i).getImagesName()).putFile(imagesList.get(i).getImagesUri()).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                    if(task.isSuccessful()) {
                        storageReference.child("UserImages/").child(imagesList.get(index).getImagesName()).getDownloadUrl()
                                .addOnCompleteListener(new OnCompleteListener<Uri>(){

                                    @Override
                                    public void onComplete(@NonNull Task<Uri> task) {
                                        counter ++;
                                        progressDialog.setMessage("Uploaded" +counter+ imagesList.size());
                                        if(task.isSuccessful()){
                                            savedimagesUrl.add(task.getResult().toString());
                                        }else{
                                            //this is to delete the image if the download url is not complete
                                            storageReference.child("UserImages/").child(imagesList.get(index).getImagesName()).delete();
                                            Toast.makeText(MainActivity2.this, "Could'nt save "+imagesList.get(index).getImagesName(), Toast.LENGTH_SHORT).show();
                                        }
                                        if(counter == imagesList.size()){
                                            saveImageDataToFirestore(progressDialog);
                                        }

                                    }
                                });

                    }else{
                        progressDialog.setMessage("Uploaded" +counter+ "/" +imagesList.size());
                        counter++;
                        Toast.makeText(MainActivity2.this, "could'nt upload"+imagesList.get(index).getImagesName(), Toast.LENGTH_SHORT).show();


                    }
                }
            });

        }
    }else{
        coreHelper.createSnackBar(v, "Please add some images first.", "", null, Snackbar.LENGTH_SHORT);
    }

}

The function saveimageDataToFirestiore will save the images from savedimagesUrl in a hashmap to send it to firestore since the ".set" method takes hashmap as parameter

    private void saveImageDataToFirestore(final ProgressDialog progressDialog) {
    progressDialog.setMessage("Saving uploaded images...");
    Map<String, Object> dataMap = new HashMap<>();
    //Below line of code will put your images list as an array in fireStore
    dataMap.put("images",savedimagesUrl);

    reference.document("ImageId").set(dataMap)
            .addOnSuccessListener(new OnSuccessListener<Object>() {
                @Override
                public void onSuccess(Object o) {
                    progressDialog.dismiss();
                    coreHelper.createAlert("Success", "Images uploaded and saved successfully!", "OK", "", null, null, null);

                }
            }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            progressDialog.dismiss();
            coreHelper.createAlert("Error", "Images uploaded but we couldn't save them to database.", "OK", "", null, null, null);
            Log.e("MainActivity:SaveData", e.getMessage());

        }
    });


}

Post a Comment for "Retrieve Images From Firebase Storage In Form Of Arraylist Or A List Then Send It To Firestore Which Later Can Be Retrieved To Populate Multiple Img"