android - 如何在 kotlin 中创建一个简单的 firebase 搜索查询
问题描述
因为我想实现一个搜索,如果有人在搜索栏中输入出生年份,那么所有出生在该特定年份的所有候选人都将显示在我的回收站视图中。
项目活动
class ItemsActivity : AppCompatActivity() {
private var mStorage:FirebaseStorage? = null
private var mDatabaseRef:DatabaseReference? = null
private var mDBListener:ValueEventListener? = null
private lateinit var mCandidate:MutableList<Candidate>
private lateinit var listAdapter:ListAdapter
private lateinit var binding: ActivityItemsBinding
override fun onCreate(savedInstanceState: Bundle?) {
binding= ActivityItemsBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.rvList.setHasFixedSize(true)
binding.rvList.layoutManager = LinearLayoutManager(this@ItemsActivity)
binding.pbLoding.visibility = View.VISIBLE
mCandidate = ArrayList()
listAdapter = ListAdapter(this@ItemsActivity,mCandidate)
binding.rvList.adapter = listAdapter
/**set Firebase Database*/
mStorage = FirebaseStorage.getInstance()
mDatabaseRef = FirebaseDatabase.getInstance().getReference("candidate_upload")
mDBListener = mDatabaseRef!!.addValueEventListener(object : ValueEventListener{
override fun onCancelled(error: DatabaseError) {
Toast.makeText(this@ItemsActivity,error.message, Toast.LENGTH_SHORT).show()
binding.pbLoding.visibility = View.INVISIBLE
}
override fun onDataChange(snapshot: DataSnapshot) {
mCandidate.clear()
for (teacherSnapshot in snapshot.children){
val upload = teacherSnapshot.getValue(Candidate::class.java)
upload!!.key = teacherSnapshot.key
mCandidate.add(upload)
}
listAdapter.notifyDataSetChanged()
binding.pbLoding.visibility = View.GONE
}
})
}
override fun onDestroy() {
super.onDestroy()
mDatabaseRef!!.removeEventListener(mDBListener!!)
}
}
解决方案
您当前存储的格式dob
不允许搜索年份。您可以使用当前格式搜索 20 日出生的每个人:
mDatabaseRef = FirebaseDatabase.getInstance().getReference("candidate_upload")
Query query = mDatabaseRef.orderByChild("dob").startAt("20/").endAt("20~")
mDBListener = query.addValueEventListener(object : ValueEventListener{
现在这当然不是一个非常常见的用例,但不幸的是 Firebase 只有这些startAt
和endAt
类型操作。
所以诀窍是以允许查询的格式存储您的日期:
"dob": "2002-04-20"
这是ISO 8601 格式,可以更轻松地处理日期。例如,我们现在可以查询 2002 年出生的每个人:
Query query = mDatabaseRef.orderByChild("dob").startAt("2002/").endAt("2002~")
~
就是上面不是 Firebase 的操作符,而只是最后一个可打印的 ASCII 字符。
推荐阅读
- javascript - 如何删除树中的单身儿童?
- typescript - 打字稿泛型作为对象键名
- mysql - 具有两个 IN 运算符的 SQL 查询,比较按索引执行
- c# - 如何在 Windows azure 虚拟机上挂载 azure 文件共享?
- heroku - 如何在 Heroku 上修复“包裹:权限被拒绝”
- c# - HotChocolate 将 UseFiltering 与 QueryType 中的解析器一起应用于字段
- kubernetes - 将 Cloud Tasks 与 GKE 服务结合使用
- angular - Angular:将 ngx-datatable 与 *ngFor 一起使用
- python - 如何在 pypy3 上运行 python 脚本而不使用 Windows 10 上的命令行?
- reactjs - 如何禁用 React 组件上的鼠标事件(echarts-for-react)?