在我的应用程序中,我使用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并获取联系人姓名的最佳解决方案是什么?
提前谢谢!
答案 0 :(得分:1)
你必须:
所以说你已经完成了第1步,并列出了电话号码。然后,您将遍历这些内容以及每个内容:
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()
的调用可确保适配器知道它需要更新视图。
虽然代码有点复杂,但它并不像你最初担心的那么慢,因为Firebase pipelines the requests over a single connection。性能主要取决于您在数据库中拥有的用户数量,但最多可达数十万,这应该没问题。