Firebase 按类别名称搜索

Posted

技术标签:

【中文标题】Firebase 按类别名称搜索【英文标题】:Firebase search by category name 【发布时间】:2021-12-31 13:02:20 【问题描述】:

我使用 EditText搜索 firebase 数据,代码完美但无法搜索数据。这是我的 java 代码和 xml 代码,请找出此代码中的错误以及我可以为正常工作做些什么。我使用了许多替代方法,例如 filterSearch 但不适合我...

这是我的 JavaCode

EditText searchText;

    //searching..........
    searchText = view.findViewById(R.id.searchText);
    searchText.addTextChangedListener(new TextWatcher() 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) 

        

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 

        

        @Override
        public void afterTextChanged(Editable s) 
            if (!s.toString().isEmpty())
                search(s.toString());
            
            else 
                search("");
            
        
    );

//searching..........
private void search(String s) 
    Query query = dbCategories.getDatabase().getReference("categories").startAt(s).endAt(s + "\uf8ff");

    query.addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
            if (dataSnapshot.hasChildren())
                YPCategoryList.clear();
                for (DataSnapshot ds: dataSnapshot.getChildren())
                    String name = ds.getKey();
                    String desc = ds.child("desc").getValue(String.class);
                    String thumb = ds.child("thumbnail").getValue(String.class);

                    final YPCategory c = new YPCategory(name, desc, thumb);
                    YPCategoryList.add(c);
                
                YPCategoriesAdapter adapter = new YPCategoriesAdapter(getContext().getApplicationContext(), YPCategoryList);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            
        

        @Override
        public void onCancelled(@NonNull DatabaseError error) 

        
    );

这是我的 XML 代码

 <EditText
android:id="@+id/searchText"
android:layout_
android:layout_
android:hint="Search Category By Name..."
android:layout_marginTop="2dp"/>

【问题讨论】:

我试图在下面提供答案,但不确定 是否是 确实是问题所在。请注意,“它不起作用”真的很难帮助。因此,如果我的回答还没有解决问题,请在您的问题中添加更多信息:1)您用于测试的s 的确切值。更好的是,你能用硬编码的搜索值重现问题吗? 2) 哪一行代码不符合您的预期?它有什么作用?你期待什么? 如果您考虑在某个时间点尝试使用Cloud Firestore,您可以在此处找到可能有帮助的article。 嘿纳维德。这里有更新吗? 感谢帮助我的问题解决了???????? 【参考方案1】:

Firebase 实时数据库中的查询始终由两部分组成:

    orderBy...() 调用,指示您想要订购/过滤数据库的内容。 equalTo()start...()/end...() 调用来指示要从 #1 中过滤哪些值。

您传递了startAt/endAt,但没有指定要订购的字段,因此您不会得到任何结果。

解决这个问题:

Query query = dbCategories.getDatabase().getReference("categories")
    .orderByKey()
    .startAt(s).endAt(s + "\uf8ff");

【讨论】:

以上是关于Firebase 按类别名称搜索的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 关系删除

Firebase 中的独特属性

Firebase 实时数据库在查询之间按单词搜索?

Flutter如何根据某个值从firebase对列表进行分组

在没有服务器端代码的 Firebase 中搜索

如何从 Firebase 获取按变量排序的文档(文档名称未知)[关闭]