【发布时间】:2019-02-02 23:54:43
【问题描述】:
我在下面添加了我的 firebase 数据库的屏幕截图。我正在使用 geofire 来获取存储在电工可用的附近用户位置 lat/lng。我已经使用适配器在 ui 中显示附近用户的列表,我能够显示存储在electriciansAvailable 中的密钥。
但我不想显示密钥,而是想显示用户的姓名(例如:-san@gmail.com)。我被这个问题困扰了很长时间,请有人告诉我怎么做以列表形式显示附近用户名的名称?
下面我附上了我的截图和代码。它将电工值在 db 中更新为 true,但电工名称在列表视图中显示为空白。下面我上传了截图和代码。
fun getElectriciansAround(){
getElectriciansArounStarted = true
val customerId: String = FirebaseAuth.getInstance().currentUser!!.uid
val driversLocation:DatabaseReference=FirebaseDatabase.getInstance().reference.child("electricianAvailable")
val geofire:GeoFire= GeoFire(driversLocation)
val geoQuery:GeoQuery = geofire.queryAtLocation(GeoLocation(mLastLocation.latitude,mLastLocation.longitude), 10000.0)
geoQuery.addGeoQueryEventListener(object : GeoQueryEventListener{
override fun onKeyEntered(key: String?, location: GeoLocation?) {
val electricianRef:DatabaseReference=FirebaseDatabase.getInstance().reference.child("users").child("Electricians").child(key!!)
driversLocation.addListenerForSingleValueEvent(object :ValueEventListener{
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
if(dataSnapshot.exists() && dataSnapshot.childrenCount>0){
for(i in 0 until dataSnapshot.childrenCount){
electricianRef.child(customerId).setValue(true)
getDriverName("Electricians",key!!)
electricianNames= arrayOf(mElectricianName)
val adapter= ArrayAdapter(this@CustomerElectricianHome, android.R.layout.simple_expandable_list_item_1, electricianNames)
mListViewElectricians.adapter=adapter
}
}
}
})
Run code snippet
var mElectricianName:String=""
private fun getDriverName(ElectricianName: String, key: String) {
val mDriverNameDb:DatabaseReference=FirebaseDatabase.getInstance().reference.child("users").child(ElectricianName).child(key)
mDriverNameDb.addListenerForSingleValueEvent(object :ValueEventListener{
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(dataSnapshot: DataSnapshot) {
if(dataSnapshot.exists()){
val map:Map<*,*> = dataSnapshot.value as Map<*,*>
if(map["name"]!=null){
mElectricianName= map["name"].toString()
}
}
}
})
}
[[在此处输入图片描述]
【问题讨论】:
标签: android firebase firebase-realtime-database kotlin