我正在开发Android Messenger应用。为此,用户使用 Firebase实时数据库中存储的电话号码进行注册。
要开始给某人发短信,用户应该在他的联系人中拥有该数据库上的其他已注册用户。
为此,我有一种方法可以从用户手机上检索联系人,并在数据库上检索signedUp用户。
private List<String> getContactsFromFirebase(final MyCallback myCallback){
FirebaseDatabase.getInstance().getReference().child("Users")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Users user = snapshot.getValue(Users.class);
assert user != null;
String contact_found = user.getPhone_number();
mContactsFromFirebase.add(contact_found);
}
myCallback.onCallback(mContactsFromFirebase);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return mContactsFromFirebase;
}
将在数据库中找到的用户与用户的联系人进行比较
private List<String> findSignedUpContacts(Map<String, String> contactsStored, List<String> firebaseNumbers) {
List<String> values = new ArrayList<>();
for (String firebaseNumberKey : firebaseNumbers) {
values.add(contactsStored.get(firebaseNumberKey));
}
return values;
}
现在,我想从Firebase数据库中检索有关上面创建的列表中存储的数字的信息(与数据库和联系人匹配的数字),并将结果显示在 FirebaseRecyclerAdapter 中。
我怎么能这样做?
这是我的数据库结构。
Users
5AWIQqYkdoZwFBqM0YrvZiqBj633
image: "https://firebasestorage.googleapis.com/v0/b/cha..."
name: "Plasita"
phone_number: "+50940404200"
status: "Coding is my life.."
thumbnail: "Default"
答案 0 :(得分:2)
抱歉,Firebase中没有机制可以按列表查询,您需要遍历列表并查询每个元素,这是非常低效的。我建议的是:因为你已经带来了&#34;用户&#34;的所有元素。节点,将它们存储在辅助数据结构中并对其进行过滤。
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Users user = snapshot.getValue(Users.class);
assert user != null;
String contact_found = user.getPhone_number();
mContactsFromFirebase.add(user);//this data structure now takes users
}
private List<User> findSignedUpContacts(Map<String, String> contactsStored, List<User> firebaseUsers) {
List<User> values = new ArrayList<>();
for (User user : firebaseUsers) {
if(contactsStored.containsKey(user.getPhone_number())
{
values.add(user);
}
}
return values;
}
现在,值包含与手机中的用户匹配的用户数据。