代码之家  ›  专栏  ›  技术社区  ›  tarun14110

从firebase检索多个子节点的数据

  •  1
  • tarun14110  · 技术社区  · 6 年前

    我正在开发一个应用程序,我只想显示其联系人号码保存在手机中的用户的数据。所以,我找到了一份联系电话列表 contactList 。现在,我想把所有的 接触表 来自firebase的用户帖子。有什么方法可以让Firebase只提供我的 接触表 . 一种方法是检索所有用户,然后从中获取相关用户(如下所示)。有更好的办法吗?

    Users: { 
                7828272892 : {
                     name: xyz, 
                     gender: male,
                     phoneNo: 7828272892
                     Posts: {
                         SomeKey1: {
                             content: "This is post 1", Var2: "kkk"} }},
                7924272894 : {name: abc, gender: male, phoneNo: 7924272894} 
            }
    

    代码:

     databaseReference.child("Users").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                    List<Post> allItems = new ArrayList<Post>();
                    for (DataSnapshot postSnapshot: snapshot.getChildren()) {
                     if (contactList.contains(postSnapshot.child("phoneNo").getValue())) {
                          // retrieve posts
                      }
                    }
                }
    
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
    
                }
            });
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Alex Mamo    6 年前

    有什么方法可以让Firebase只提供我的 contactList ?

    是的,你已经这样做了。

    有更好的办法吗?

    这样做是firebase中常用的一种做法。查询数据库并检查列表中是否已存在数据,在您的情况下,在 接触表 。如果列表中包含 phoneNo 然后你就可以找回这些帖子了。

        2
  •  0
  •   Mobile Team ADR-Flutter    6 年前

    请尝试此代码读取多个节点数据..

     mFirebaseInstance = FirebaseDatabase.getInstance();
        mDatabase = mFirebaseInstance.getReference("usersDb/UserTable");
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mUserList.clear();
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                    User user = dataSnapshot1.getValue(User.class);
                    mUserList.add(user); // add all data into list.
                }
                }
    
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });