java - Firebase 数据库搜索查询无法正常工作
问题描述
我正在创建一个社交应用程序,例如 facebook,但在使用 Firebase 数据库查询进行查找朋友活动时遇到了困难。
问题是没有显示搜索结果(用户)。 当我将 allUsersRef 作为参数放入 setQuery() 时,会显示用户,但是当我将 searchFriendsQuery 作为参数时,它不会显示任何内容。 我看了很多答案来解决我的问题,但没有一个有效。
这是我陷入困境的方法,正如我所说,此方法按全名搜索 firebase 数据库,然后显示与用户输入匹配的用户:
private fun searchFriends(userInputText: String) {
Log.i("SEARCH",userInputText)
Toast.makeText(this,"Searching...",Toast.LENGTH_LONG).show()
val searchFriendsQuery = allUsersRef.orderByChild("fullname")
.startAt(userInputText)
.endAt(userInputText + "\uf8ff")
val options: FirebaseRecyclerOptions<FindFriends> = FirebaseRecyclerOptions.Builder<FindFriends>()
.setQuery(searchFriendsQuery,FindFriends::class.java)
.build()
val firebaseRecyclerAdapter = object: FirebaseRecyclerAdapter<FindFriends,FindFriendsViewHolder>(options) {
override fun onBindViewHolder(viewHolder: FindFriendsViewHolder, position: Int, model: FindFriends) {
viewHolder.setProfilesInfo(model)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FindFriendsViewHolder {
val view: View = LayoutInflater.from(parent.context)
.inflate(R.layout.users_display_layout, parent, false)
return FindFriendsViewHolder(view)
}
}
firebaseRecyclerAdapter.startListening()
searchOutputList.adapter = firebaseRecyclerAdapter
}
这是我的 viewHolder 类:
class FindFriendsViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
var mView = itemView
private val friendsProfileImage: CircleImageView = mView.findViewById(R.id.find_users_profile_image)
private val friendsFullName: TextView = mView.findViewById(R.id.find_user_full_name)
private val friendsStatus: TextView = mView.findViewById(R.id.find_user_status)
fun setProfilesInfo(friends: FindFriends){
friendsFullName.text = friends.fullname
friendsStatus.text = friends.status
Glide.with(itemView.context)
.load(friends.profileimage)
.into(friendsProfileImage)
}
}
这是我的模块类:
class FindFriends {
var profileimage: String? = null
var fullname: String? = null
var status: String? = null
}
这些是代码中变量的值:
private lateinit var allUsersRef: DatabaseReference
private lateinit var searchOutputList: RecyclerView
private lateinit var searchInputText: EditText
allUsersRef = FirebaseDatabase.getInstance().reference.child("Users")
searchOutputList = findViewById(R.id.search_list)
searchOutputList.setHasFixedSize(true)
searchOutputList.layoutManager = LinearLayoutManager(this)
searchInputText = findViewById(R.id.search_input_box).toString()
JSON 导出文件:
"Users" : {
"Q4RWEkf8YsRnQppwpEYrSMKa0M82" : {
"country" : "Mexico",
"dateofbirth" : "Unknown",
"fullname" : "Oswaldo Escobedo",
"gender" : "Unknown",
"profileimage" : "https://firebasestorage.googleapis.com/v0/b/myhero-8778b.appspot.com/o/Profile%20Images%2FQ4RWEkf8YsRnQppwpEYrSMKa0M82.jpg?alt=media&token=44fe278b-a7f0-42c7-90b9-dfbcc57bf733",
"relationshipstatus" : "Unknown",
"status" : "Active",
"username" : "oswi73"
},
"h7DPxSQax3PNYFcXNDSgk4H9zyF2" : {
"country" : "Mexico",
"dateofbirth" : "Unknown",
"fullname" : "Jenny Balandran",
"gender" : "Unknown",
"profileimage" : "https://firebasestorage.googleapis.com/v0/b/myhero-8778b.appspot.com/o/Profile%20Images%2Fh7DPxSQax3PNYFcXNDSgk4H9zyF2.jpg?alt=media&token=99633998-46f4-4a64-806d-3a8bc7ec0580",
"relationshipstatus" : "Unknown",
"status" : "Active",
"username" : "oescob16"
},
"nq6OPYGHuAdCApuyXhLYHLLdOtA3" : {
"country" : "México ",
"dateofbirth" : "Unknown",
"fullname" : "Oswaldo Escobedo",
"gender" : "Unknown",
"profileimage" : "https://firebasestorage.googleapis.com/v0/b/myhero-8778b.appspot.com/o/Profile%20Images%2Fnq6OPYGHuAdCApuyXhLYHLLdOtA3.jpg?alt=media&token=55f8c342-9e74-400f-8038-5a7af208510e",
"relationshipstatus" : "Unknown",
"status" : "Active",
"username" : "oescobedo3 "
}
}
这是 userInputText 的日志值:
2020-06-14 19:26:11.288 10129-10129/com.example.bemyhero I/SEARCH: androidx.appcompat.widget.AppCompatEditText{e57e7ff VFED..CL. .F...... 30,103-1080,313 #7f08012a app:id/search_input_box aid=1073741824}
解决方案
您似乎已经调用toString
了一个EditText
字段。将其传递给数据库是行不通的,因为您将在数据库中搜索文字 string "androidx.appcompat.widget.AppCompatEditText{e57e7ff VFED..CL. .F...... 30,103-1080,313 #7f08012a app:id/search_input_box aid=1073741824}"
。
您需要从该字段中获取文本,然后搜索:
searchFriends(textField.getText().toString());
推荐阅读
- r - 如果 R 中的数据框中有重复的值和 id,如何删除整行
- php - Laravel - 缺少路由所需的参数
- javascript - ThreeJS:将边缘几何应用于 ArrowHelper
- python - 使用 image_dataset_from_directory 加载灰度 png 返回一个 3 通道张量
- openj9 - 不同应用程序之间的 OpenJ9 类共享
- html - 在 HTML 表格中添加图标
- html - 显示以前查看过的页面中的特定 DIV
- c# - 有没有办法在缓存过期之前通知 Web 应用程序有关密钥保管库机密的更新
- asp.net-mvc - 无法将“System.Collections.Generic.List`1 Models.Hospitals]”类型的对象转换为“System.Collections.Generic.IEnumerable”类型
- matlab - 为什么我们需要对凸多边形进行三角剖分以便从中均匀采样?