将多个Urls保存到一个Firebase节点android

问题描述 投票:0回答:1

我可以将多个图像上传到Firebase存储,之后可以检索每个独立图像的downloadUrl。上载图像后,还有其他用户数据也通过Hashmap上传到数据库。我一直在寻找一种方法来将单个图像downloadUrl保存到在Hashmap中创建的名称为“ imagelist”的子节点中,但是没有成功。关于如何进行的任何指导?我希望downloadUrls显示为在Hashmap中创建的节点“ imageslist”的子节点。这是我希望如何构造数据库的图片image这是我的代码。请注意,当前用户字符串是当前用户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();

                    }
                }
            });
java android firebase firebase-storage
1个回答
0
投票

从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();
                                    }
                                }
                            });
                }
            });
        }
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.