查询从Firebase检索特定数据

时间:2017-03-19 18:01:37

标签: android firebase firebase-realtime-database

我正在创建一个Android应用程序,我遇到了问题。为了解释这个问题,我想展示我的数据库结构

{

 "EXlzg1COUbOhQjwPCGbS1NRdp5H3" : {
    "Contacts" : {
      "Contact1" : value (Contact number)
      "Contact2" : value
      "Contact3" : value
    },
    "name" : "Sagar Khan",
    "phone" : 7276273667
  },


 "OLm7VWsMcGQpterECyhJ8YTSPna2" :  {
    "Contacts" : {
      "Contact1" : value
      "Contact2" : value
      "Contact3" : value
    },
    "name" : "Sameer",
    "phone" : 8412914728
  },
  "TXanCkqtB5PdEogtv8Dzw8y1ngw1" : {
    ""Contacts" : {
      "Contact1" : value
      "Contact2" : value
      "Contact3" : value
    },
    "name" : "Harish",
    "phone" : 7020743544
  },
  "qnDVoc72nXa8XvOH1L39VvqFzKL2" : {
    "Contacts" : {
      "Contact1" : value
      "Contact2" : value
      "Contact3" : value
    },
    "name" : "Harish Shinde"
    "phone":  8149870822
  }
}

这是非常短的结构,实际的是大的 现在我想做的是我只想获取当前用户节点中存在联系号码的用户,并在Android列表中显示这些用户。

例如:

ID为EXlzg1COUbOhQjwPCGbS1NRdp5H3的用户1有3个联系人

"EXlzg1COUbOhQjwPCGbS1NRdp5H3" : {
    "Contacts" : {
      "Sameer" : 8412914728 (Contact number)
      "Contact2" : value
      "Contact3" : value
    },
    "name" : "Sagar Khan",
    "phone" : 7276273667
  },

现在,当我从我的数据库中获取用户列表并将其显示在我的Android应用列表中时,我只想添加那些用户1联系人中存在联系号码的用户。

我的问题是我实际上不知道如何做到这一点,因为我是Android开发和Firebase的新手。我很清楚Firebase的读写基础,但是这样的操作,我不知道该怎么做。

我搜索了很多,但找不到任何解决方案或示例。详细说明对我来说非常好。 ;)提前致谢。

1 个答案:

答案 0 :(得分:0)

这是我提出的改变:

这是Users节点的新数据库结构:

"Users" : {
  "EXlzg1COUbOhQjwPCGbS1NRdp5H3" : {
      "name" : "Sagar Khan",
      "phone" : 7276273667
    },
    ..
}

用户的联系人" Sagar Khan"将存储在该用户的UserID(EXlzg1COUbOhQjwPCGbS1NRdp5H3)下名为Contacts的另一个节点中:

"Contacts" : {
  "EXlzg1COUbOhQjwPCGbS1NRdp5H3" : {
      "Contact1":{
        "name" : "Sameer",
        "phone" : 7276273000
      },
      "Contact2":{
        "name" : "Alice",
        "phone" : 7276273600
      },
      ...
    },
    //other user id with  their contacts
    ...
  }

我怀疑用户ID(例如: EXlzg1COUbOhQjwPCGbS1NRdp5H3 )来自登录用户,使用:

mAuth.getCurrentUser().getUid();

因此,要获取已登录用户的联系人,您可以像这样查询数据库:

DatabaseReference  mUserContactsRef =  FirebaseDatabase.getInstance().getReference().child("Contacts").child(mAuth.getCurrentUser().getUid(););
mUserContactsRef.addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {

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

              Contact contact = userContact.getValue(Contact.class);
              //add each contact to an arraylist and use it to populate a list of contacts

          }

      }

      @Override
      public void onCancelled(DatabaseError databaseError) {

      }
  });

您可以将每个联系人对象添加到ArrayList并使用它来填充列表。关键是用户ID,您可以使用UserID访问与用户相关的任何内容。

这是我推荐的方法,也是我过去成功用于类似场景的方法。