Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按编辑文本筛选结果_Java_Android_Firebase Realtime Database - Fatal编程技术网

Java 按编辑文本筛选结果

Java 按编辑文本筛选结果,java,android,firebase-realtime-database,Java,Android,Firebase Realtime Database,在我的ExploreFragment.java中,我有一个EditText,它基本上允许用户搜索存储在我的Firebase实时数据库中的国家名称。 我想实现的是,当用户在编辑文本中键入内容,然后在键盘上按“提交”键时,它会生成一个查询,检索每个在其名称中键入字符串的国家,并重定向到我的片段FilteredResultsFragment.java,其中显示检索到的国家的名称。我的片段有一个带有适配器的回收器视图。 我还没有做到这一点。我需要检索一个带有URL的列表和一个带有名称的列表。 查询应如下

在我的
ExploreFragment.java
中,我有一个EditText,它基本上允许用户搜索存储在我的Firebase实时数据库中的国家名称。 我想实现的是,当用户在编辑文本中键入内容,然后在键盘上按“提交”键时,它会生成一个查询,检索每个在其名称中键入字符串的国家,并重定向到我的片段
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();
Log.d(“TAMANHO”,“size=“+paisescolido.size());

对于(int i=0;i如果要使用
startAt()
过滤数据,还必须使用
endAt()
,因为
startAt()
是查询的起点,而不是过滤器。通过在
endAt(
)中的搜索字符串后面添加
\uf8ff
(最后一个unicode字符)您将查询限制为仅获取以searchstring开头的值:

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

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

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

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

请记住,这将只获取以searchstring开头的项目,而不是包含searchstring的项目。

Firebase无法查询包含值的字符串。它只能查询以该值开头的字符串。这是否解释了您在运行此代码时看到的情况o如果我保存一个值为EditText的变量,然后像这样查询它,但将“equalTo”更改为“startWith(variable)”,我将获得所有以这些字符开头的国家/地区?@FrankvanPuffelen,请参阅我的更新问题:)您可以在firebase适配器中按“x”进行筛选。只要隐藏你不想显示的项目视图,请简化你的代码,因为现在有太多的事情要做。1) 删除对视图的所有操作,2)删除所有列表,3)对搜索字符串使用硬编码值,4)使用简单日志语句写入与预期不同的值,5)显示查询的数据结构,6)显示日志语句的输出。这样就可以在十几行左右的行中重现问题。Firebase无法查询包含值的字符串。它只能查询以该值开头的字符串。这能解释你运行代码时看到的情况吗?嗯,如果我保存一个值为EditText的变量,然后像这样查询它,但将“equalTo”改为“startWith(variable)”,我会得到所有以这些字符开头的国家/地区?@frankvanpoffelen,请参阅我的更新问题:)您可以通过firebase适配器中的“x”进行筛选。只要隐藏你不想显示的项目视图,请简化你的代码,因为现在有太多的事情要做。1) 删除对视图的所有操作,2)删除所有列表,3)对搜索字符串使用硬编码值,4)使用简单日志语句写入与预期不同的值,5)显示查询的数据结构,6)显示日志语句的输出。这样的话,应该可以用十几行来重现这个问题。伙计,很抱歉再次打扰你,但是,我怎么才能让第一个字母总是大写呢?我的意思是,当用户键入“portu”时,与他键入“portu”时不同ahaha@AndréSilva Mate,很抱歉再次打扰你,但是,我如何才能让第一个字母始终保持较高?我的意思是,当用户键入“portu”时,与他键入“portu”时不同ahaha@Andr塞席尔瓦