java - 如何更有效地在 Android 聊天应用中接收和显示好友列表中的所有好友
问题描述
我一直在开发一个聊天应用程序,我很快就会在 google play store 上发布它。所以我的问题是从firebase数据库中检索朋友时。我使用我的应用程序查找每个用户 ID,然后如果它与我的朋友 ID 匹配,我会显示该 ID。因此,如果我有 2000 个用户,那么它将检查每个用户,然后向我显示一个会吃掉 CPU 的朋友,如果我只有 30 个朋友,也可能需要数年时间。
代码如下。
database.child(FirebaseAuth.getInstance().getUid()).child("friends")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
list.clear();
for (DataSnapshot dataSnapshot2 : snapshot.getChildren()) {
String friends = dataSnapshot2.getValue(String.class);
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot1) {
for (DataSnapshot dataSnapshot : snapshot1.getChildren()) {
if (dataSnapshot.getKey().equals(friends)) {
Users users = dataSnapshot.getValue(Users.class);
users.setUserId(dataSnapshot.getKey());
list.add(users);
}
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
@Override
public void onCancelled(@NonNull @NotNull DatabaseError error) {
}
});
这是完成整个工作的一小部分,有人可以教我完成这项任务的最有效方法。
解决方案
如果您有一个令牌列表,并且您有一个文件夹,其中该令牌是存储这些用户的文件夹的名称,如果您可以通过令牌访问文件夹,为什么还要解析整个列表以寻找匹配项
推荐阅读
- ios - 用户选择日期后无法显示“今天”而不是今天的日期
- c# - 带有 where 子句的 LINQ 方法语法
- c++ - C++中固定数组和动态分配数组的区别
- scala - SBT 同步在 intellij 上引发错误“无法添加依赖项”
- jquery - Bootstrap (v4.4.1) 折叠不适用于 jQuery (v3.5.0) - 错误:无法将对象转换为原始值
- python - 首次出现后如何为所有下一个日期添加条目
- lisp - 如何从终端在 Mac 上运行 lisp 程序?
- javascript - 第二个组件无法重新加载数据
- android - 未调用作业服务
- c - 结构变量是否默认初始化?