我可以将多个图像上传到Firebase存储,之后可以检索每个独立图像的downloadUrl。上载图像后,还有其他用户数据也通过Hashmap上传到数据库。我一直在寻找一种方法来将单个图像downloadUrl保存到在Hashmap中创建的名称为“ imagelist”的子节点中,但是没有成功。关于如何进行的任何指导?我希望downloadUrls显示为在Hashmap中创建的节点“ imageslist”的子节点。这是我希望如何构造数据库的图片这是我的代码。请注意,当前用户字符串是当前用户ID和将数据放入数据库的确切时间的组合。我这样做是为了使每个帖子都可以具有唯一的邮编。预先感谢。
for (filecount = 0; filecount < uriList.size(); filecount++ ){
Uri itemUri = uriList.get(filecount);
final StorageReference filePath = PostsImagesRefrence.child("Post_Images").child(itemUri.getLastPathSegment() + tfm + ".jpg");
filePath.putFile(itemUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
downUrl = String.valueOf(uri);
}
});
}
});
}
final HashMap postsMap = new HashMap();
postsMap.put("uid", currentUser);
postsMap.put("time", time);
postsMap.put("imagelist/" + downUrl, true);
ItemsRef.child(currentUser).updateChildren(postsMap)
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task)
{
if(task.isSuccessful())
{
Toast.makeText(this, "Done!", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "Error Occured.Please try again.", Toast.LENGTH_SHORT).show();
}
}
});
从Firebase存储获取下载URL需要调用服务器。为防止阻止该应用程序,在此过程中,您的主要代码将继续进行。然后,当下载URL可用时,Firebase会调用您的onSuccess
方法。
这意味着需要下载URL的任何代码都必须在onSuccess
方法内部,或从那里调用。因此,例如:
for (filecount = 0; filecount < uriList.size(); filecount++ ){
Uri itemUri = uriList.get(filecount);
final StorageReference filePath = PostsImagesRefrence.child("Post_Images").child(itemUri.getLastPathSegment() + tfm + ".jpg");
filePath.putFile(itemUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
downUrl = String.valueOf(uri);
final HashMap postsMap = new HashMap();
postsMap.put("uid", currentUser);
postsMap.put("time", time);
postsMap.put("imagelist/" + downUrl, true);
ItemsRef.child(currentUser).updateChildren(postsMap)
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if(task.isSuccessful())
{
Toast.makeText(this, "Done!", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "Error Occured.Please try again.", Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
});
}