在我的ExploreFragment.java
中,我有一个 EditText ,它基本上允许用户搜索存储在我的 Firebase实时数据库中的国家/地区名称。
我要实现的是,当用户在 EditText 中键入内容,然后在键盘上按“提交”时,它会进行查询,以检索每个在其名称中键入了字符串的国家/地区,并重定向到我的片段FilteredResultsFragment.java
,其中显示了所检索国家的名称。我的片段有一个带有适配器的回收站视图。
我还没有做到这一点。我需要检索一个带有URL的列表和一个带有名称的列表。
查询应如下所示:
FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
Log.d("TAMANHO","size = "+paisEscolhido.size());
for (int i = 0; i<paisEscolhido.size(); i++) {
Log.d("CONTINETNE","size = "+paisEscolhido.get(i));
DatabaseReference paisNomeContinentes = mDatabase.getReference().child("paises");
Query queries = paisNomeContinentes.orderByChild("Continente").equalTo(paisEscolhido.get(i));
queries.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<String> imagemPaisList = new ArrayList<>();
List<String> nomePaisList = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String imagemPais = ds.child("Imagem").getValue(String.class);
String nomePais = ds.child("Nome").getValue(String.class);
imagemPaisList.add(imagemPais);
nomePaisList.add(nomePais);
}
int urlCount = imagemPaisList.size();
// int randomImage = new Random().nextInt(urlCount);
for (int i = 0; i < nomePaisList.size(); i++) {
Integer randomVariavel = new Random().nextInt(urlCount);
randomImagemPaisList.add(imagemPaisList.get(randomVariavel));
randomNomePaisList.add(nomePaisList.get(randomVariavel));
}
更新
我提出了以下查询:
FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
DatabaseReference paisNomeContinentes = mDatabase.getReference().child("paises");
Query queries = paisNomeContinentes.orderByChild("Nome").startAt("Po");
queries.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<String> imagemPaisList = new ArrayList<>();
List<String> nomePaisList = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String imagemPais = ds.child("Imagem").getValue(String.class);
String nomePais = ds.child("Nome").getValue(String.class);
imagemPaisList.add(imagemPais);
nomePaisList.add(nomePais);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
那应该检索以用户在我的EditText
中写的值开头的国家/地区的名称,但是,当我写例如“ Po” 时,它应该给我< strong>“葡萄牙” 和“波兰” ,但是,它却给了我随机图像...
这是数据结构:
UPDATE V2 它实际上给了我“波兰”和“葡萄牙”作为最佳结果,但它显示了除这两个以外的更多ImageView(还有随机图像)...
答案 0 :(得分:2)
如果您想使用startAt()
来过滤数据,则还必须使用endAt()
,因为startAt()
是查询的起点,而不是过滤器。通过在\uf8ff
的搜索字符串后面添加endAt(
(最后一个unicode字符),您可以限制查询以仅获取以搜索字符串开头的值:
Query queries = paisNomeContinentes.orderByChild("Nome").startAt("Po").endAt("Po" + "\uf8ff");
请记住,这只会获得从搜索字符串开始开始的项目,而不会得到包含搜索字符串的项目。