我正在尝试将多个图片Uri添加到Firestore中的相同字段。
我一直在尝试多种方法,而不是将图像Uris添加到同一个字段中,它会在fire store中创建多个文档。我需要帮助。
for (int i = 0; i < imageUris.size(); i++) {
Toast.makeText(getApplicationContext(), "ROUND:" + i, Toast.LENGTH_SHORT).show();
imgUri = imageUris.get(i);
imageFilesPath = storageReference.child("Ads_images" + "/" + "Ad_" + UUID.randomUUID().toString() + ".jpg");
imageFilesPath.putFile(imgUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful() && task != null) {
LIST.add(task.getResult().getDownloadUrl().toString());
Log.e(TAG, "List inside"+LIST.size());
Map<String, Object> adMap = new HashMap<>();
adMap.put("user_id", user_id);
adMap.put("description", "Small description is shown here");
adMap.put("imageUris", Arrays.asList(LIST.get(0)));
firebaseFirestore.collection("Ads").add(adMap);
}else {
}
}
});
答案 0 :(得分:3)
每次在集合上调用add()
时,Firestore都会创建一个新文档。由于您现在在上传每个文件后调用add()
,因此您将获得每个文件的单独文档。如果您要将URL添加到现有文档,则必须获得该文档的DocumentReference
并进行更新。
firebaseFirestore.collection("Ads").doc("v1ys3tyQ7vhHLD0ietAw").update(adMap);
要向imageUris
数组添加URL,您需要先加载该数组的当前内容(以确定要将项添加到的索引)。这种读取 - 更新序列在规模上有些低效。如果这对您的应用很重要,您可能需要考虑使用storing the URLs in a map inside the document或storing them in a subcollection under the document。
答案 1 :(得分:0)
Map<String,Object> imageUrl = new HashMap<>();
imageUrl.put("ImageUrl", imageList);
firebaseFirestore.collection("ImageDetails").document(userId)
.set(imageUrl,SetOptions.merge());
这对我也很好,但是一旦添加了所有列表项,我就分别通过了列表,其中imageUrl
是我的地图对象,imageList
是用于存储生成的图像uri下载链接的数组列表
我也有机会看一下您如何取回所有这些图像uri的代码