kotlin - 如何使用材料 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)
}
}
解决方案
尝试用连字符或 CamelCase 分隔 Firebase 中的“To Do Over”。即“To-Do-Over”或“ToDoOver”。目的是使其成为一个单词并消除空格
推荐阅读
- c# - Service Bus Queue的多个客户中的取消令牌处理
- php - 仅需要具有 composer 的特定服务器的包
- java - java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在使用 Gson 库时为 STRING
- java - 当我在数组中有参数时如何发送发布请求?
- android - 游戏中的 onTouchEvent()
- c# - 检查 null 后的 null 引用异常(检查 null 不起作用)
- html - 更改网格模板列会破坏布局
- javascript - reactjs的render方法中如何使用三元运算符?
- arrays - 快速分组建模数组数据
- python - Django get_absolute_url() 将用户返回到主页