所以现在我正在尝试显示仅存在于 firebase 数据库“用户”表中的联系人,
所以第一步是获取我的所有联系人(不到一秒就完美完成) 第二个是检索我的数据库中的所有用户,只是为了比较两个 Arraylist 以检查我的联系人是否存在于数据库中,如果存在则显示它们(这实际上是场景)
我已经这样做了,但我百分百确定这是一个太慢的算法! ,
如果数据库中有 200 万用户,并且我有 1000 个联系人,那么 1000 * 2,000,000 !!要显示我的联系人(Firebase 数据库中唯一存在的联系人)需要很长时间,
有什么解决办法吗?
这是我的代码
`
// this means it will load the whole users from database !
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
contactsList.clear();
// this algorithm means that if there is one million records it will loop through
//all of them
// then add all of them to the list
// takes lots of time actually :(
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
User user = snapshot.getValue(User.class);
for(Contacts contacts : PhonecontactsList){
// if this user phone eqauals the phone we saved in the phone array list
if(user.getPhone().equals(contacts.getPhone())){
// if the user doesn't exist in the list
if (!contactsList.contains(user)) {
// add them
contactsList.add(new User(
user.getId(),
contacts.getUsername(),
user.imageURL,
user.getStatus(),
user.getPhone(),
user.getTyping_to(),
user.getSearch(),
user.getTimestamp()
));
}
}
}
}
UsersAdapter usersAdapter = new UsersAdapter(getContext(), contactsList , false);
contactsRecycler.setAdapter(usersAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
`
提前致谢!
最佳答案
从 Firebase 实时数据库等云托管数据库中获取全部 100 万条记录是一个非常糟糕的主意。通过移动连接传输所有这些记录不可能很快。最终用户还可能花费大量数据流量才能获得整套数据。
如果您只需要知道本地数据集中有哪些数据库记录,只需对本地数据集中的每个项目发出一个请求,然后显示存在的记录即可。您可以忽略其他一切。
关于java - android - 比较两个非常大的ArrayList,其中一个从firebase检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59708093/