首页 > 解决方案 > 如何使用材料 SearchBar 和 Firebase 实时数据库按值搜索?

问题描述

在此处输入图像描述 Kotlin 如何以及在哪里声明值,以便我可以获得结果。通过此代码,我无法获得搜索结果。因为它显示 listview 但在通过路径字符串搜索时。结果不显示。

搜索栏出现一些错误。

如果我想按注释和任务或只是任务搜索,我已经在其中分享了一张图片,那么我们必须在其中声明那个孩子。我已经声明了 orderByChild,但是当我在 searchBar 中搜索某些内容时也没有任何消息。所以帮我解决这个问题。

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)
        }
    }

标签: kotlinfirebase-realtime-databasesearchbar

解决方案


尝试用连字符或 CamelCase 分隔 Firebase 中的“To Do Over”。即“To-Do-Over”或“ToDoOver”。目的是使其成为一个单词并消除空格


推荐阅读