gpt4 book ai didi

java - 通过编辑文本过滤结果

转载 作者:行者123 更新时间:2023-12-02 02:03:23 24 4
gpt4 key购买 nike

在我的 ExploreFragment.java 中,我有一个 EditText,它基本上允许用户搜索存储在我的 Firebase 实时数据库 中的国家/地区名称。我想要实现的是,当用户在 EditText 中键入内容,然后按键盘中的“提交”时,它会进行一个查询,检索每个国家/地区的名称中包含他们键入的字符串,并重定向到我的 fragment FilteredResultsFragment.java,其中显示检索到的国家/地区的名称。我的 fragment 有一个带有适配器的回收器 View 。我还没有达到这个目标。我需要检索一个包含 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”,它应该给我“葡萄牙”“波兰”,但是,它给我随机图像......

这是数据结构:

enter image description here

更新 V2它实际上给了我“波兰”和“葡萄牙”作为最佳结果,但它显示了除这两个之外的更多 ImageView(也包含随机图像)...

最佳答案

如果您想使用 startAt() 来过滤数据,您还必须使用 endAt() 因为 startAt() 的工作方式如下查询的起点而不是过滤器。通过在 endAt() 中的搜索字符串后面添加 \uf8ff (最后一个 unicode 字符),您可以将查询限制为仅获取以搜索字符串开头的值:

Query queries = paisNomeContinentes.orderByChild("Nome").startAt("Po").endAt("Po" + "\uf8ff");

请记住,这只会获取以搜索字符串开头的项目,而不是包含搜索字符串的项目。

关于java - 通过编辑文本过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51232267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com