Kotlin 如何使用带Firebase实时数据库的材质搜索栏按值搜索?

Kotlin 如何使用带Firebase实时数据库的材质搜索栏按值搜索?,kotlin,firebase-realtime-database,searchbar,Kotlin,Firebase Realtime Database,Searchbar,Kotlin 如何以及在何处声明值以便获得结果。通过此代码,我无法获得搜索结果。因为它显示listview,但在按路径字符串搜索时。结果未显示 搜索栏出现了一些错误 我在这里分享了一张图片,如果我想通过便笺和任务或只是任务进行搜索,那么我们必须在哪里声明那个孩子。我已经声明了orderByChild,但是当我在搜索栏中搜索某个内容时,也没有任何结果。帮我解决这个问题 class ToDoOverActivity : AppCompatActivity() { lateinit va

Kotlin 如何以及在何处声明值以便获得结果。通过此代码,我无法获得搜索结果。因为它显示listview,但在按路径字符串搜索时。结果未显示

搜索栏出现了一些错误

我在这里分享了一张图片,如果我想通过便笺和任务或只是任务进行搜索,那么我们必须在哪里声明那个孩子。我已经声明了orderByChild,但是当我在搜索栏中搜索某个内容时,也没有任何结果。帮我解决这个问题

class ToDoOverActivity : AppCompatActivity() {

      lateinit var toolbar: Toolbar
      lateinit var todoOver: ListView
      lateinit var todoOverList: MutableList<TodoClass>
      lateinit var auth: FirebaseAuth
      lateinit var ref: DatabaseReference
      lateinit var user: FirebaseUser
        override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_to_do_over)
         auth = FirebaseAuth.getInstance()
         user = auth.currentUser!!
         todoOver = findViewById(R.id.todoOver)
         todoOverList = mutableListOf()
         toolbar = findViewById(R.id.toolbar)
         setUpToolbar()
         val searchBar = findViewById(R.id.searchBar) as MaterialSearchBar
            searchBar.setHint("Search...")
            searchBar.isSearchEnabled
         ref = FirebaseDatabase.getInstance().getReference().child(user.uid).child("To Do Over")
            ref.addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {
              if (snapshot!!.exists()){
              todoOverList.clear()
                for (h in snapshot.children){
                val overTask = h.getValue(TodoClass::class.java)
                todoOverList.add(overTask!!)
         val adapter = TodoOverAdapter(this@ToDoOverActivity, R.layout.todo_over_layout, todoOverList)
                todoOver.adapter = adapter
         searchBar.addTextChangeListener(object: TextWatcher{
               override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
            }
               override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                 val searchText = searchBar.text.toString()
                 searchTask(searchText.toLowerCase())
                 adapter.getFilter().filter(p0)
     }
         override fun afterTextChanged(p0: Editable?) {
             }
           })
          }
         }
         override fun onCancelled(error: DatabaseError) {
             }
            })
         }
          private fun searchTask(searchText: String){
            ref.child("To Do Over").orderByChild("task").startAt(searchText)
                         .endAt("$searchText\uf8ff")
        }
        fun setUpToolbar(){
        setSupportActionBar(toolbar)
        supportActionBar?.setHomeButtonEnabled(true)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        }
    }
类ToDoOverActivity:AppCompatActivity(){ lateinit变量工具栏:工具栏 lateinit变量todoOver:ListView lateinit变量todoOverList:MutableList lateinit var auth:FirebaseAuth lateinit var ref:数据库引用 lateinit变量用户:FirebaseUser 重写创建时的乐趣(savedInstanceState:Bundle?){ super.onCreate(savedInstanceState) setContentView(R.layout.activity_to_do_over) auth=FirebaseAuth.getInstance() user=auth.currentUser!! todoOver=findViewById(R.id.todoOver) todoOverList=mutableListOf() toolbar=findviewbyd(R.id.toolbar) setUpToolbar() val searchBar=findviewbyd(R.id.searchBar)作为材料搜索栏 searchBar.setHint(“搜索…”) searchBar.isSearchEnabled ref=FirebaseDatabase.getInstance().getReference().child(user.uid.child)(“重做”) ref.addValueEventListener(对象:ValueEventListener{ 覆盖数据更改(快照:DataSnapshot){ 如果(快照!!.exists()){ todoOverList.clear() for(快照中的h.children){ val overTask=h.getValue(TodoClass::class.java) todoOverList.add(超任务!!) val适配器=TodoOverAdapter(this@ToDoOverActivity,R.layout.todo_over_layout,todoOverList) todoOver.adapter=适配器 addTextChangeListener(对象:TextWatcher{ 重写更改前的乐趣(p0:CharSequence?,p1:Int,p2:Int,p3:Int){ } 重写有趣的文本更改(p0:CharSequence?,p1:Int,p2:Int,p3:Int){ val searchText=searchBar.text.toString() searchTask(searchText.toLowerCase()) adapter.getFilter().filter(p0) } 覆盖后文本更改(p0:可编辑?){ } }) } } 覆盖已取消(错误:DatabaseError){ } }) } 私人趣味搜索任务(搜索文本:字符串){ ref.child(“完成”).orderByChild(“任务”).startAt(搜索文本) .endAt(“$searchText\uf8ff”) } 乐趣设置工具栏(){ 设置支持操作栏(工具栏) supportActionBar?.setHomeButtonEnabled(真) supportActionBar?.setDisplayHomeAsUpEnabled(真) } } 尝试用连字符或CamelCase分隔firebase中的“要做的事情”。
那就是“重来一遍”或“重来一遍”"。其目的是使其成为一个单词并消除空格。

数据是从Firebase异步读取的,因此需要结果的任何代码都需要位于
onDataChange
中或从tere调用。有关示例和更多信息,请参阅。我已编辑了该问题。请看一看,我看到您对搜索文本所做的一切都是
ref.child(“To Do Over”).orderByChild(“task”).startAt(searchText).endAt($searchText\uf8ff”)
。这会创建一个查询,但在将侦听器附加到该查询之前,不会读取任何内容(就像您已经使用
addValueEventListener
所做的那样).你能告诉我我要做什么,给哪个听众打电话,以及在里面声明什么吗。