我想让应用程序将许多图像上传到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));
}
}
});
}
});
此函数接受两个参数数据:
我想像这样运行它
uploadImage(path1,data,1);
uploadImage(path2,data,2);
uploadImage(path3,data,3);
uploadfile()
这意味着我要上传图像并完成,然后上传秒图像并完成等,然后运行uploadfile,因为我的问题是uploadfile不等待上传图像完成。
答案 0 :(得分:0)
通过写这样的上传图片解决了问题
public void upLoadImage(String path,String path2, String path3,Map<String,Object> list,int KEY,String Auth){
if(!path.equals("empty") && path != null){
Toast.makeText(getApplicationContext(),"path = " + path,Toast.LENGTH_LONG).show();
Uri file = Uri.fromFile(new File(path));
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) {
Toast.makeText(getApplicationContext(),"No Connection",Toast.LENGTH_LONG).show();
}
});
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));
upLoadImage(path2,"null",path3,list,2,Auth);
}
if(KEY == 2){
list.put("image2",String.valueOf(uri));
upLoadImage(path3,"null","null",list,3,Auth);
}
if(KEY == 3){
list.put("image3",String.valueOf(uri));
uploadFile(list,Auth);
}
}
});
}
});
}else {
uploadFile(list,Auth);
}
}