如何获取内部子值 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 获取子值的键?