Zig*_*rve 31 android firebase firebase-realtime-database
我想在我的应用程序中创建一个简单的搜索,但在关于它的互联网上找不到任何东西,这比2014年更新.必须有更好的方法.有startAt和endAt函数,但它们不能按预期工作,并且区分大小写.你们是如何解决这个问题的?2016年该功能如何仍然不存在?
Fra*_*sco 111
在我的情况下,我能够通过以下方式部分实现SQL LIKE:
databaseReference.orderByChild('_searchLastName')
.startAt(queryText)
.endAt(queryText+"\uf8ff")
Run Code Online (Sandbox Code Playgroud)
\uf8ff查询中使用的字符是Unicode范围内的一个非常高的代码点(它是私有使用区[PUA]代码).因为它在Unicode之后的大多数常规字符之后,所以查询匹配以所有开头的值queryText.
通过这种方式,通过"Fre"搜索,我可以_searchLastName从数据库中获取具有"Fred,Freddy,Frey"作为属性值的记录.
小智 7
最后我明白了,您可以使用 where 子句来获取结果,例如SQL LIKE关键字like%或%like
语法:
Firestore.collection(collectionName).orderBy(field).where(field, ">=", keyword.toUpperCase()).where(field, "<=", keyword.toUpperCase() + "\uf8ff").get()
Run Code Online (Sandbox Code Playgroud)
小智 6
创建两个字符串变量
searchInputToLower = inputText.getText().toString().toLowerCase();
searchInputTOUpper = inputText.getText().toString().toUpperCase();
Run Code Online (Sandbox Code Playgroud)
然后在查询中将其设置为:
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Products");//Your firebase node you want to search inside..
FirebaseRecyclerOptions<Products> options =
new FirebaseRecyclerOptions.Builder<Products>()//the Products is a class that get and set Strings from Firebase Database.
.setQuery(reference.orderByChild("name").startAt(searchInputUpper).endAt(searchInputLower + "\uf8ff"),Products.class)
.build();
Run Code Online (Sandbox Code Playgroud)
“名称”是产品主节点内的节点。
.startAt(searchInputUpper) & .endAt(searchInputLower + "\uf8ff") 使搜索包含在您获得的 inputText.getText() 中输入的所有字符。
| 归档时间: |
|
| 查看次数: |
53510 次 |
| 最近记录: |