android - updateChildren 不更新图像数组,它覆盖现有数组(url)数据 firebase android
问题描述
updateChildren 不更新图像数组,它覆盖了现有的数组(url)数据 firebase android。我想向 firebase 中的现有 url 数组添加更多图像。这是我的火力基地结构
Blog--
pushid--
"name": xxxx
"url"
-- 0: "first image"
1: "second image"
我想更新(向现有 url 数组添加更多图像。我使用 updatechildren() 但它覆盖了现有图像
for (String photo : selectedImages) {
blogimages = new ArrayList<>();
Uri file = Uri.fromFile(new File(photo));
Bitmap bitmap = null;
try {
bitmap = decodeSampledBitmapFromUri(file, mMaxDimension, mMaxDimension);
StorageReference photoRef = mstorageReference.child("images/" + file.getLastPathSegment());
uploadTask = photoRef.putBytes(byteArray);
uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUrl = taskSnapshot.getDownloadUrl();
blogimages.add(downloadUrl.toString());
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("url", blogimages);
HashMap<String, Object> params = new HashMap<>();
params.put("url", blogimages);
uploads.child(post_key).child("url").updateChildren(params).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(UpdatePost.this, "Post updated..", Toast.LENGTH_LONG).show();
MainActivity.loaded = true;
Intent i = new Intent(UpdatePost.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(UpdatePost.this, "Failed to post the blog.. Try again later", Toast.LENGTH_LONG).show();
}
});
}
});
} catch (FileNotFoundException e) {
Log.e(TAG, "Can't find file to resize: " + e.getMessage());
FirebaseCrash.report(e);
} catch (IOException e) {
Log.e(TAG, "Error occurred during resize: " + e.getMessage());
FirebaseCrash.report(e);
}
}
解决方案
这不是工作方式updateChildren()
。 updateChildren()
将完全覆盖您指定的所有子字段的内容。它根本不会“推送”数组元素,也不会执行任何其他类似数组的操作。如果要追加到数组,则必须从数据库中读取数组的内容,然后添加元素,然后将其写回。
请注意,Firestore 的不同之处在于它有一个 arrayUnion 操作来将非唯一的数组元素附加到数组类型字段。
推荐阅读
- python-3.x - 如何将特定行的内容打印到控制台?
- angular - 内容安全策略:页面设置阻止在 http://localhost:4200/favicon.ico ("default-src") 加载资源
- c# - 如何检测对已知文件夹重定向的更改
- c# - 如何将参数传递给 C# .Net Core 项目?
- performance-testing - 庞巴迪 - 从文件中读取
- sql - Postgres,如果表中不存在id,则返回默认行
- podman - podman pod 更改端口映射
- php - 你能用一个 HTML 文件制作一个表单吗?
- java - DB 列上的 Spring JPA 错误返回与列名相关的错误
- javascript - 在加载 DOM 之前运行的脚本标签