java - Android Studio:使用firebase数据库查询用户数据需要时间加载
问题描述
我有一个 Firebase 实时数据库,其中包含具有以下结构的用户数据:
AppName
Users
User1
address:
current_loc:
dp:
homeloc:
loc:
name:
phone:
username:
User2
address:
current_loc:
dp:
homeloc:
loc:
name:
phone:
username:
现在,在应用程序中,我使用了一个搜索视图,它接受这样的查询,
public boolean onQueryTextChange(String s) {
if(s!=null&&!s.isEmpty()&&!s.equals(" ")) {
searchQ(s);
}
else {
resultList.setAdapter(new SearchAdapter(new ArrayList<SearchUsers>()));
}
return false;
}
});
我将用户数据放在列表中,然后与搜索查询进行比较。这就是我填充列表的方式:
@Override
protected void onStart(){
super.onStart();
if(searchData!=null){
searchData.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()){
list.add(ds.getValue(SearchUsers.class));
SearchAdapter SA = new SearchAdapter(list);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(SearchFamily.this,"Error : "+databaseError.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
}
SearchQ 方法,
private void searchQ(String str){
lav.setVisibility(View.INVISIBLE);
i = getIntent();
i.getExtras();
Usern = i.getStringExtra("usr");
ArrayList<SearchUsers> Susers = new ArrayList<>();
for(SearchUsers obj:list){
if(!obj.getUsername().contains(Usern))
if(obj.getUsername().toLowerCase().contains(str) || obj.getName().toLowerCase().contains(str.toLowerCase())) {
Susers.add(obj);
}
}
SearchAdapter newSAdapter = new SearchAdapter(Susers);
if(newSAdapter.getItemCount()==0){
lav.setVisibility(View.VISIBLE);
lav.playAnimation();
}
resultList.setAdapter(newSAdapter);
}
编辑 1: 适配器采用 name、username、loc、dp(profile pic)、homeloc 值。
这个完整的过程需要 2-3 秒来加载。我目前只有 3-4 个用户。有没有最佳的搜索方式?如果用户群增加到 1000+ 左右,有什么更好的解决方案?
解决方案
推荐阅读
- flutter - 使用 Firestore 流进行颤动分页
- msbuild - Windows 代理无法识别 SonarScanner.MSBuild.exe - GitHub Actions
- ios - 尽管 Info.plist IOS 模拟器旋转
- laravel - 如何根据 laravel-8 中的选择更改迁移表中的角色管理员或用户?
- php - PHP数组唯一不能像预期的那样工作
- c# - 如何在 Blazor 中的页面之间传递对象
- python - PyQt6 如何动态调整 QGroupBox 的大小以适应内容?
- google-cloud-ml - 顶点 ai:ResourceExhausted 429 收到尾随元数据大小超过限制
- reactjs - 以与 `useMutation` 失败相同的方式使用 `useQuery` 钩子
- swift - 检索手动输入的数据 Firestore