如何获取内部子值 Firebase?

Posted

技术标签:

【中文标题】如何获取内部子值 Firebase?【英文标题】:How to get inner child values Firebase? 【发布时间】:2020-09-09 13:20:03 【问题描述】:

我试图通过将节点与我的字符串数组进行比较来检索内部子值。我在 Firebase 中有以下数据库结构。

结构:

-Posts
    -uid1
        -postid1
            -postid1:
            -title:
            -description:
        -postid2
            -postid2:
            -title:
            -description:
    -uid2
        -postid1
            -postid1:
            -title:
            -description:

我想通过比较给定字符串数组中的 uid 来获取所有 postid 的数据。如何从 uid > postid > postid,title,description 中获取每个节点的 postid、title、description?

以下是我想与 Firebase uids 比较的 ID,以仅获取这些帖子的数据。

String uids[]="uid1","uid2";

如何在 android Java 代码中编写解决方案?

我写过这样的东西。

final String uids[]="id1","id2";
        DatabaseReference reference=FirebaseDatabase.getInstance().getReference().child("Posts");
        reference.addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                for(DataSnapshot ds: dataSnapshot.getChildren())
                
                    for(int i=0;i< uids.length;i++)
                        if(uids[i].equals(ds.getKey()))
                        
                            // stuck in here
                        
                
            
            public void onCancelled(@NonNull DatabaseError databaseError) 
        );

我被 UIDis 匹配的代码卡住了。如何获取内部 postid 数据?

【问题讨论】:

你能告诉我们你目前有什么代码吗?看看你尝试过的东西可能会很好地指导他们的答案。 是的,请查看更新后的答案。我无法编写代码来获取 postid 数据。请帮我完成代码。谢谢 【参考方案1】:

您可以使用递归方法解决此问题。首先,您需要将该数组转换为这样的列表:

String[] uids = "uid1", "uid2";
List<String> uidList = Arrays.asList(uids);

uidList 设为全局变量:

private List<String> uidList;

并将上面的行改为:

uidList = Arrays.asList(uids);

现在,定义一个引用:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postsRef = rootRef.child("Posts");

并创建一个新的Post 对象列表:

List<Post> posts = new ArrayList<>();

下面是施展魔法的方法:

public void getAllUserPosts() 
    if (uidList.size() > 0) 
        String uid = uidList.get(0);
        uidList.remove(0);
        postsRef.child(uid).addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                for(DataSnapshot ds : dataSnapshot.getChildren()) 
                    Post post = ds.getValue(Post.class);
                    posts.add(post);
                
                getAllUserPosts();
            

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError)  throw databaseError.toException(); 
        );
    

最后,只需调用这个方法:

getAllUserPosts();

结果将是一个完整的列表,其中包含所有用户的所有 Post 对象。

【讨论】:

困难的解决方案。我无法理解。请让它更简单 你有什么不明白的?再简单不过了。 ***.com/questions/61981810/… 我去看看,如果我知道答案,我会写信给你。 @KassandraJones “支持我的问题 = 我会接受你的回答”这不是交易。如果您认为我的回答对您有所帮助,您应该考虑接受它。如果我觉得你的问题很有趣,我会投票赞成。但我不会只为你的问题投票,所以你接受我的回答。

以上是关于如何获取内部子值 Firebase?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Cloud Functions for Firebase 获取子值的键?

如何从 firebase 实时数据库中获取子值和过滤器?

如何使用两个子值在 Firebase 中进行搜索?

将子值从 firebase 获取到 android 应用程序

如何读取 Firebase 子值?

Firebase 和 Swift 如何按子值提取特定记录?