仅返回Firebase

时间:2018-05-27 02:54:40

标签: android firebase firebase-realtime-database android-recyclerview

我正在开发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"

1 个答案:

答案 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;
}

现在,值包含与手机中的用户匹配的用户数据。