如何从 firebase 实时数据库中获取子值?
Posted
技术标签:
【中文标题】如何从 firebase 实时数据库中获取子值?【英文标题】:How can get the child values from firebase realtime database? 【发布时间】:2021-11-04 10:16:46 【问题描述】:如何从 Firebase 实时数据库中获取子值?
下面是我的架构:
Posts
|--firebase key
|--title: test1
|--sub: NY
|--country: USA
--firebase key
|--title: test2
|--sub: DC
|--country: USA
--firebase key
|--title: test3
|--sub: DC
|--country: USA
--firebase key
|--title: test4
|--sub: FRA
|--country: EU
--firebase key
|--title: test5
|--sub: UK
|--country: EU
我想读取sub的值,但是像DC一样一共有三个值,但是我只想取一次,因为我想要实现的是有值的状态会显示在RecyclerView中,但是像AL、AZ、AL、AR等,还没有添加,所以不会显示。
那我该怎么做呢?
我会用这个方法来获取post country,那么如何显示subs呢?
DatabaseReference countryRef = FirebaseDatabase.getInstance().getReference("Posts");
Query query = countryRef.orderByChild("country").equalTo(country);
query.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
@Override
public void onCancelled(@NonNull DatabaseError error)
);
【问题讨论】:
【参考方案1】:DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postsRef = rootRef.child("Posts");
postsRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>()
@Override
public void onComplete(@NonNull Task<DataSnapshot> task)
if (task.isSuccessful())
List<String> posts = new ArrayList<>();
for (DataSnapshot ds : task.getResult().getChildren())
String sub = ds.child("sub").getValue(String.class);
if(!posts.contains(sub))
posts.add(sub);
for (String post : posts)
Log.d("TAG", post);
else
Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
);
logcat 中的结果将是:
NY
DC
AK
如果您想在 android 中的 RecyclerView 中显示这些结果,您应该考虑使用我在以下帖子中的回答:
How to display data from Firestore in a RecyclerView with Android?【讨论】:
我希望只显示 NY、DC、AK。 在这种情况下,请查看我的更新答案。 logcat 中的结果不会包含重复项。现在可以了吗? 谢谢兄弟,但我忘记了非常重要的事情。我更新了我的上下文。因为我会有很多国家信息,如果用户选择美国那么它只是显示美国子,但如果用户选择欧盟那么它需要显示欧盟 我已经更新了我的上下文,你能检查一下吗? 如果您在读取数据方面遇到其他问题,请不要编辑实际问题,而是使用自己的MCVE 发布新问题,以便我和其他 Firebase 开发人员可以帮助您。跨度> 【参考方案2】:首先使用此代码获取数据库引用
private DatabaseRefrence mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
您可以使用此代码轻松获取孩子
mFirstChild = mDatabase.child("child-name");
mSecondChild = mFirstChild.child("2-child-name");
【讨论】:
我可以使用模型吗?因为我想在回收站视图中展示和使用 CardView。以上是关于如何从 firebase 实时数据库中获取子值?的主要内容,如果未能解决你的问题,请参考以下文章
从 Firebase 查询具有在 ArrayList 中找到的子值的对象