我正在创建一个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的读写基础,但是这样的操作,我不知道该怎么做。
我搜索了很多,但找不到任何解决方案或示例。详细说明对我来说非常好。 ;)提前致谢。
答案 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访问与用户相关的任何内容。
这是我推荐的方法,也是我过去成功用于类似场景的方法。