Android: 为什么 firebase Push key 没有改变
Android: why the firebase Push key doesn't change
所以我正在将图像上传到 firebase 存储,link 将保存在实时 firebase 中
现在我正在使用 for 循环上传图片,我想让上传到存储的图片名称成为 firebase 给 realTime 的推送 ID。
但由于某种原因,图像将在存储中使用不同的推送 ID 成功保存,但当保存到实时 ID 时,ID 将相同并且循环将在同一 ID 内不断更新。
imagePath 是全局变量。
for (uploadCount = 0; uploadCount < ImageList.size(); uploadCount++) {
imagePath = productRef.child(UID).child("images").push().getKey();
Uri IndividualImage = ImageList.get(uploadCount);
StorageReference ImageName = productImagesRef.child(UID).child(imagePath);
//Compress Images
Bitmap bmp = null;
try {
bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), IndividualImage);
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);
byte[] data = baos.toByteArray();
//End of compressing
//start on uploading compressed
ImageName.putBytes(data).addOnSuccessListener(taskSnapshot -> ImageName.getDownloadUrl()
.addOnSuccessListener(uri -> {
String url = String.valueOf(uri);
StoreLink(url);
}));
}
这是 firebase 实时上传:
private void StoreLink(String url) {
HashMap<String ,Object> hashMap = new HashMap<>();
hashMap.put("image", url);
hashMap.put("id", imagePath);
dialog.dismiss();
assert imagePath != null;
productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
finish();
}
});
}
你没有在任何地方将 imagePath
传递给你的 StoreLink
函数,这让我怀疑它来自某个地方的上下文,而你只是看到它的最后一个值。
此修复,将您的 StoreLink
函数更改为:
//
private void StoreLink(String url, String imagePath) {
HashMap<String ,Object> hashMap = new HashMap<>();
hashMap.put("image", url);
hashMap.put("id", imagePath);
dialog.dismiss();
assert imagePath != null;
productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
finish();
}
});
}
然后调用它:
//
StoreLink(url, imagePath);
所以我正在将图像上传到 firebase 存储,link 将保存在实时 firebase 中
现在我正在使用 for 循环上传图片,我想让上传到存储的图片名称成为 firebase 给 realTime 的推送 ID。
但由于某种原因,图像将在存储中使用不同的推送 ID 成功保存,但当保存到实时 ID 时,ID 将相同并且循环将在同一 ID 内不断更新。 imagePath 是全局变量。
for (uploadCount = 0; uploadCount < ImageList.size(); uploadCount++) {
imagePath = productRef.child(UID).child("images").push().getKey();
Uri IndividualImage = ImageList.get(uploadCount);
StorageReference ImageName = productImagesRef.child(UID).child(imagePath);
//Compress Images
Bitmap bmp = null;
try {
bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), IndividualImage);
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);
byte[] data = baos.toByteArray();
//End of compressing
//start on uploading compressed
ImageName.putBytes(data).addOnSuccessListener(taskSnapshot -> ImageName.getDownloadUrl()
.addOnSuccessListener(uri -> {
String url = String.valueOf(uri);
StoreLink(url);
}));
}
这是 firebase 实时上传:
private void StoreLink(String url) {
HashMap<String ,Object> hashMap = new HashMap<>();
hashMap.put("image", url);
hashMap.put("id", imagePath);
dialog.dismiss();
assert imagePath != null;
productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
finish();
}
});
}
你没有在任何地方将 imagePath
传递给你的 StoreLink
函数,这让我怀疑它来自某个地方的上下文,而你只是看到它的最后一个值。
此修复,将您的 StoreLink
函数更改为:
//
private void StoreLink(String url, String imagePath) {
HashMap<String ,Object> hashMap = new HashMap<>();
hashMap.put("image", url);
hashMap.put("id", imagePath);
dialog.dismiss();
assert imagePath != null;
productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
finish();
}
});
}
然后调用它:
//
StoreLink(url, imagePath);