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();
}
});
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"