【问题标题】:Firebase child node retrievingFirebase 子节点检索
【发布时间】:2021-04-24 22:33:16
【问题描述】:

我正在尝试从 firebase 检索所有子节点“userID”并将它们存储在 userList 数组列表中。 Datasnapshot 对象 dsp 提取所有数据,但无法将其传递给始终为空的 userList。这是我的代码 sn-p:

groupList = FirebaseDatabase.getInstance ().getReference ().child ( "Group Members" );

groupList.addValueEventListener(new ValueEventListener()
{

    @Override
    public void onDataChange( DataSnapshot dataSnapshot)
    {
        List<String> userList = new ArrayList<> ();

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

            String  uID = dsp.child ("userID").getValue().toString ();
            userList.add ( uID );
        }
    }

您建议对代码进行哪些更改?

【问题讨论】:

  • 尝试在onValueEventListener之外初始化用户列表

标签: java android firebase firebase-realtime-database


【解决方案1】:

您只循环Group Members 的直接子节点,因此您的dsp 变量指向Android11mgrpthe lovers。由于这些都没有属性userIDuID 变量确实总是为空或空。

您需要遍历 JSON 中的嵌套级别(诸如 MtNY... 之类的键)才能获取 userID 值。

所以:

groupList = FirebaseDatabase.getInstance().getReference("Group Members" );

groupList.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange( DataSnapshot dataSnapshot) {
        List<String> userList = new ArrayList<> ();

        for (DataSnapshot snapshot: dataSnapshot.getChildren ()) {
            for (DataSnapshot userSnapshot: snapshot.getChildren ()) {
                String  uID = userSnapshot.child ("userID").getValue(String.class);
                userList.add ( uID );
            }
        }
    }

【讨论】:

  • 谢谢弗兰克,你的评论拯救了我的一天 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多