![](/img/trans.png)
[英]Why my Firebase firestore data is not showing in android
[英]Why my image's data url is not saving in firebase firestore?
我正在开发一个应用程序,我需要将多个图像写入 firebase 存储并将其 URL 保存到 firestore 数据库。 我能够将数据写入存储,但它的 url 没有保存在 Firestore 数据库中。 请指导我如何在我做错的地方实现这一目标。
我的代码
activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == RESULT_OK && null != result.getData()) {
if (result.getData().getClipData() != null) {
//this part to get multiple images
int countOfImages = result.getData().getClipData().getItemCount();
for (int i = 0; i < countOfImages; i++) {
// limiting the number of images picked up from gallery
if (uri.size() < 11) {
Uri imageuri = result.getData().getClipData().getItemAt(i).getUri();
uri.add(imageuri);
String imageName = getfilename(imageuri);
StorageReference mref = reference.child("RoomsImages").child(imageName);
mref.putFile(imageuri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
saveImageDataToFirestore();
Toast.makeText(MainActivity.this, "Data Added to firebase storage", Toast.LENGTH_SHORT).show();
mref.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
savedImagesUri.add(task.getResult().toString());
}
});
}
}
});
} else {
Toast.makeText(MainActivity.this, "Not Allowed more than 11 images", Toast.LENGTH_SHORT).show();
}
}
//this to notify
adapter.notifyDataSetChanged();
rentSell3Binding.totalphotos.setText("Photos (" + uri.size() + ")");
}
Firestore 代码
private void saveImageDataToFirestore() {
Map<String, Object> dataMap = new HashMap<>();
//Below line of code will put your images list as an array in firestore
dataMap.put("images", savedImagesUri);
collectionReference.add(dataMap).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(MainActivity.this, "Images Uploaded and saved successfully", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// coreHelper.createAlert("Error", "Images uploaded but we couldn't save them to database.", "OK", "", null, null, null);
Toast.makeText(MainActivity.this, "Images uploaded but we couldn't save them to database.", Toast.LENGTH_SHORT).show();
Log.e("MainActivity:SaveData", e.getMessage());
}
});
}
每次图像上传完成时,您都将整个图像 URL 数组写入 Firebase,但如果是最新上传,则在下载 URL之前这样做。 所以这意味着你最终会错过你上传的最后一张图片的下载 URL。
要解决此问题,请将写入 Firestore 的代码移动到下载 URL 后运行的onComplete
中:
mref.putFile(imageuri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
Toast.makeText(MainActivity.this, "Data Added to firebase storage", Toast.LENGTH_SHORT).show();
mref.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
savedImagesUri.add(task.getResult().toString());
saveImageDataToFirestore(); // 👈
}
});
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.