来自电话簿的联系人姓名和来自 Firebase 的号码

Contactnames from Phonebook with numbers from Firebase

在我的应用程序中,我使用 Firebase 检索用户的手机号码。因此我使用这个代码:

databaseUsers.orderByChild("uid").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            users.clear();
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                User contactlists = postSnapshot.getValue(User.class);
                users.add(contactlists);
            }
            ContactList contactAdapter = new ContactList(ContactListActivity.this, users);
            listViewContacts.setAdapter(contactAdapter);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

现在我有以下问题:如果用户数量很高,是否可以只发送您电话簿中的手机号码?否则我认为到 Firebase 的流量可能不是那么有效?! 另一个机会是单独发送每个号码,但如果用户有很多联系人,这可能会非常复杂。

目前我从服务器获取了所有号码,但我需要过滤正确的联系人并且我需要显示联系人的姓名。

尽可能高效地使用 Firebase 并获取联系人姓名的最佳解决方案是什么?

提前致谢!

你必须:

  1. 遍历本地 phone 簿以查找每个联系人的 phone 号码。
  2. 针对每个号码向 Firebase 执行查询。
  3. 将生成的联系人(如果有)添加到 list/adapter 并更新视图。

假设您已完成第 1 步并获得了 phone 个号码的列表。然后你会循环遍历这些和每个:

for (String phonenumber: phonenumbers) {

    Query query = databaseUsers.orderByChild("phonenumber").equalTo(phonenumber);

    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            User contactlists = postSnapshot.getValue(User.class);
            users.add(contactlists);
            adapter.notifyDataSetChanged();
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException(); // don't ignore erors
        }
    });
}

调用 notifyDataSetChanged() 确保适配器知道它需要更新视图。

虽然代码有点复杂,但并不像您最初担心的那么慢,因为 。性能主要取决于您在数据库中拥有的用户数量,但最多几十万应该没问题。