Android 我不明白为什么尺寸是0造成的
我不知道大小返回到0的位置,我在Kotlin中使用Android中的GeoCoder从LatLng获取地址,如下所示:Android 我不明白为什么尺寸是0造成的,android,kotlin,kotlin-coroutines,kotlin-android-extensions,Android,Kotlin,Kotlin Coroutines,Kotlin Android Extensions,我不知道大小返回到0的位置,我在Kotlin中使用Android中的GeoCoder从LatLng获取地址,如下所示: fusedLocationProviderClient.lastLocation .addOnFailureListener {e -> Snackbar.make(requireView(),e.message!!,Snackbar.LENGTH_SHORT).show() } .addOnSuccessList
fusedLocationProviderClient.lastLocation
.addOnFailureListener {e -> Snackbar.make(requireView(),e.message!!,Snackbar.LENGTH_SHORT).show() }
.addOnSuccessListener { location ->
// load all driver city
val geocoder = Geocoder(requireContext(),Locale.getDefault())
var addressList: List<Address> = ArrayList()
try {
addressList = geocoder.getFromLocation(location.latitude, location.longitude, 1)
CityName = addressList[0].locality
// query
val drever_location_ref = FirebaseDatabase.getInstance().getReference(common.DREIVER_LOCATION_REFERNCE)
.child(CityName)
val gf = GeoFire(drever_location_ref)
val geoQuery = gf.queryAtLocation(GeoLocation(location.latitude, location.longitude), distance)
geoQuery.removeAllListeners()
geoQuery.addGeoQueryEventListener(object:GeoQueryEventListener {
override fun onGeoQueryReady() {
if (distance <= LIMIT_RANG)
{
distance++
loadAvailbleDrivers()
}
else
{
distance =0.0
addDriverMarker()
}
}
override fun onKeyEntered(key: String?, location: GeoLocation?) {
common.dreiversfound.add(DriverGeoModel(key!!,location!!))
}
override fun onKeyMoved(key: String?, location: GeoLocation?) {
}
override fun onKeyExited(key: String?) {
}
override fun onGeoQueryError(error: DatabaseError?) {
Snackbar.make(requireView(),error!!.message,Snackbar.LENGTH_LONG).show()
}
})
drever_location_ref.addChildEventListener(object :ChildEventListener{
override fun onChildAdded(p0: DataSnapshot, p1: String?) {
val geoQueryModel = p0.getValue(GeoQueryModel::class.java)
val geoLocation= GeoLocation(geoQueryModel!!.l!![0],geoQueryModel.l!![1]) // L ( letter small)
val driverGeoModel= DriverGeoModel(p0.key,geoLocation)
val newDreiverLocation = Location("")
newDreiverLocation.latitude = geoLocation.latitude
newDreiverLocation.longitude = geoLocation.longitude
val newDestance = location.distanceTo(newDreiverLocation)/1000 // KM (kilo metter)
if (newDestance <= LIMIT_RANG)
{
findDeriverbykey(driverGeoModel)
}
}
override fun onChildChanged(p0: DataSnapshot, p1: String?) {
TODO("Not yet implemented")
}
override fun onChildRemoved(p0: DataSnapshot) {
TODO("Not yet implemented")
}
override fun onChildMoved(p0: DataSnapshot, p1: String?) {
TODO("Not yet implemented")
}
override fun onCancelled(p0: DatabaseError) {
Snackbar.make(requireView(),p0.message,Snackbar.LENGTH_LONG).show()
}
})
}catch (e:IOException)
{
Snackbar.make(requireView(),getString(R.string.permission_require),Snackbar.LENGTH_LONG).show()
}
}
}
但是,对于addresslist.maxAddressLineIndex
,我得到了0
CityName[0]
具有以下值。我通过调试进行了检查
可能是什么问题?有什么解决方案吗?您不能在主线程中运行
geocoder.getFromLocation
private fun addDriverMarker() {
if (common.dreiversfound.size > 0)
{
Observable.fromIterable(common.dreiversfound)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({driverGeoModel:DriverGeoModel?->
findDeriverbykey(driverGeoModel)
},
{
t: Throwable? ->
Snackbar.make(requireView(),t!!.message!!,Snackbar.LENGTH_LONG).show()
}
)
}
else
{
Snackbar.make(requireView(),getString(R.string.driver_not_found),Snackbar.LENGTH_LONG).show()
}
}