【问题标题】:Firebase get child of childlistFirebase 获取子列表的子项
【发布时间】:2016-09-23 13:35:09
【问题描述】:

我创建了一个 ListView,它应该显示存在的 firebase 用户的所有用户名。但是现在我遇到了我不知道如何获取用户 ID 的孩子的问题。当然,我可以使用数据库中的 id 创建一个数组,但如果更多人在应用程序上注册,它不会自动完成。那么你知道如何从一个孩子那里得到所有的孩子吗?看起来是这样的

Root
   iadf09f08asd0fasd
      Infos
         Username: LeagueHans
   i297f9pb2f92
       Infos 
         Username: Julian
   08bfbüqw0efü
       Infos
         Username: Markus

来自 cmets:

DatabaseReference root = FirebaseDatabase.getInstance().getReference();
root.child("Users")‌​.child(What to write here).child("Infos").child("Username"); 

我小时候不知道如何获取用户 ID(iadf09f08asd0fasd)。

【问题讨论】:

  • Root 您正在创建的节点或其类似 fir-xxxxxx?
  • DatabaseReference root = FirebaseDatabase.getInstance().getReference().child("Users").child(这里写什么).child("Infos").child("Username");我小时候不知道如何获取用户 ID(iadf09f08asd0fasd)

标签: android firebase firebase-realtime-database


【解决方案1】:

当您对某个位置运行查询时,您将获得紧接在该位置下的节点子集。您无法检索低于该级别的子级。

因此,要么您必须检索所有数据,然后只在客户端处理用户名,要么(最好)您需要更改数据模型以更好地适应您的用例。

只使用用户名

root.child("Users")‌​.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
        String username = snapshot.child("Infos/Username).getValue(String.class);
    }
    ...

这会起作用,但意味着您检索的数据超出了您的需要。这是 Firebase 建议您不要嵌套数据的众多原因之一,除非您总是需要组合使用这些数据。

替代方法是:

使用与您的用例相匹配的数据模型

我经常建议在 Firebase 中为应用的屏幕建模。所以如果你想在你的应用中显示一个用户名列表,你应该在你的数据库中保留一个用户名列表:

Usernames
   iadf09f08asd0fasd: "LeagueHans"
   i297f9pb2f92: "Julian"
   08bfbüqw0efü: "Markus"

现在您可以通过以下方式获取用户名:

root.child("Usernamess")‌​.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
        String username = snapshot.getValue(String.class);
    }
    ...

【讨论】:

  • 哇,谢谢!但是你知道我是否可以在 FirebaseListAdapter 中显示第一个方法的用户名吗?因为它是一个字符串:/
  • 如果您在这种情况下共享您的适配器会有所帮助。 :-/ 但是,是的,您可以覆盖 parseSnapshot() 并在那里返回用户名 - 与我在这里所做的类似(尽管不完全相同):stackoverflow.com/a/34561726/209103
【解决方案2】:

这样试试……

每当您的数据库发生更改时,firebase addValueEventListener 都会触发,因此请使用它来检索您的数据。

mReference.child("Root").child("Infos").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {

                YourModel mModel = eventSnapshot.getValue(YourModel.class);
                Log.e("NAME " ,""+ mModel);

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

【讨论】:

  • 请解释一下这是什么让未来的新手知道这是什么
  • 在开始使用 Firebase 之前,如果您打算使用 Firebase,那么您应该了解它的所有方法和查询。阅读文档以继续工作,否则您将永远无法了解它是如何工作的工作。
  • 但是新手不会确切地知道你在做什么。您不能只提供代码,如果您所说的是正确的,那么无论标签如何,每个答案都应该是代码,因为在您的情况下“他应该知道它的方法和查询”,这显然是不正确的。
  • 它仍然缺少信息。我完全有权利鼓励你修正你的答案,并且我完全有权利保持我的反对意见,直到它得到改善
  • 我不想要一个事件监听器我想知道当你开始活动时我如何显示所有用户的孩子
猜你喜欢
  • 2015-01-25
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多