【发布时间】:2020-06-28 18:24:11
【问题描述】:
我想让应用程序将许多图像上传到 firestore 存储并获取这些图像的所有 url,并通过在 android 中使用 java 将其发布到 firestore 数据库中。
我有这个功能可以发布到数据库
public void uploadFile(Map<String,Object> item , String phone){
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("Users").document().collection(phone).add(item)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Toast.makeText(getApplicationContext(),"Upload Complete",Toast.LENGTH_LONG).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
数据是我将发布到数据库的数据的哈希图。此数据包含以下信息:
Map<String,Object> data = new HashMap<>();
data.put("name" , name);
data.put("phone" , phone);
data.put("city" , city);
data.put("itemName" , itemName);
data.put("price" , price);
data.put("type" , type);
data.put("subtype" , subtype);
data.put("cond" , cond);
data.put("details" , details);
我有上传照片的功能
public void upLoadImage(File data,Map<String,Object> list,int KEY){
Uri file = Uri.fromFile(data);
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReference().child("images/"+file.getLastPathSegment());
UploadTask uploadTask = storageRef.putFile(file);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
url = "fails " + e.getMessage();
}
});
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
if(KEY == 1){
list.put("image1",String.valueOf(uri));
}else if(KEY ==2){
list.put("image2",String.valueOf(uri));
}else if(KEY == 3){
list.put("image3",String.valueOf(uri));
}
}
});
}
});
这个函数有两个参数数据:
- 将在其中推送下载 url 的列表
- 图像文件
我想像这样运行它
uploadImage(path1,data,1);
uploadImage(path2,data,2);
uploadImage(path3,data,3);
uploadfile()
这意味着我要上传图片并完成然后上传秒图片并完成等,然后运行uploadfile,因为我的问题是uploadfile没有等待上传图片完成。
【问题讨论】:
-
你在 onSuccess() 中调用下一个。
标签: java android firebase asynchronous firebase-storage