Я пытаюсь сохранить несколько изображений в хранилище, затем получить URL-адрес и сохранить их в firestore по одному.
Когда я проверяю хранилище, все выбранные изображения сохраняются успешно, но когда я проверяю только документ firestore 1 или 2 URL изображений показывает. Я думаю, что из-за l oop задача сохранения URL пропускается при следующей итерации .help?
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==102 && resultCode==RESULT_OK && data!=null){
ClipData clipData=data.getClipData();
if(clipData!=null){//***********null if one image************
for(int i=0;i<clipData.getItemCount();i++){
imageAddress=clipData.getItemAt(i).getUri();//multi image retrieve
String fileName = fileNameFinder.getFileName(imageAddress);
//these are arraylist to track images upload and pending
fileNameList.add(fileName);
fileDoneList.add("uploading");
uploadListAdapter.notifyDataSetChanged();
//in storage
final int finalI = i;
imgLocationRef=storageRef.child("Categories").child(item_type).child(productKey).child(fileName);
imgLocationRef.putFile(imageAddress).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if(task.isSuccessful()){
fileDoneList.remove(finalI);
fileDoneList.add(finalI, "done");
uploadListAdapter.notifyDataSetChanged();
final HashMap<String,Object> imageLink=new HashMap<>();
imgLocationRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String downloadUrl = uri.toString();
//once image stored to storage then we get link then we add to firestore
imageLink.put("image"+finalI,downloadUrl);//map
imageDocRef.set(imageLink, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Log.d("image upload", "onComplete:image"+finalI+1+"uploaded");
}
else
Log.d("image upload",task.getException().getMessage());
}
});
}
});
}
else{
Log.d("image upload error", "img upload error:"+task.getException().getMessage());
Toast.makeText(AddImages.this,"try again!",Toast.LENGTH_SHORT).show();
}
}
});
}
}
else {
// imageAddress=data.getData();//for single image retrive
Toast.makeText(AddImages.this,"Select alleast 2 images",Toast.LENGTH_SHORT).show();
}
}
}