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 按类别名称搜索的主要内容,如果未能解决你的问题,请参考以下文章