如何在 Android (Kotlin) 中的 onSuccessListener 之外分配位置坐标?
Posted
技术标签:
【中文标题】如何在 Android (Kotlin) 中的 onSuccessListener 之外分配位置坐标?【英文标题】:How do I assign location coordinates outside an onSuccessListener in Android (Kotlin)? 【发布时间】:2019-09-09 23:31:51 【问题描述】:我正在尝试获取 android 设备的位置。我一直在关注these instructions for using fusedLocationClient。
我无法在 .addSuccessListener
之外分配变量。
我会在事件侦听器内部的日志之前调用侦听器外部的日志,因此我必须尝试在调用侦听器之前分配变量。这是有道理的,因为侦听器是异步的。
override fun onMapReady()
var loc: Location = Location("")
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
fusedLocationClient.lastLocation
.addOnSuccessListener location : Location ->
loc = location
Log.i("Lat, Long",loc.latitude.toString() + ", " + loc.longitude.toString()) // this correctly logs the latitude and longitude
Log.i("Lat, Long",loc.latitude.toString() + " " + loc.longitude.toString()) // this logs latitude and longitude as (0.0,0.0)
我已尝试将 fusedLocationClient 初始化放入 onCreate()
并将 fusedLocationClient 作为私有属性:
private fusedLocationClient: FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_display_map)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
fusedLocationClient.lastLocation
.addOnSuccessListener location : Location ->
loc = location
Log.e(loc.latitude.toString(), loc.longitude.toString())
我在 onResume 也试过了,但还是不行。
【问题讨论】:
【参考方案1】:将loc
属性设为委托属性:
var loc: Location? by Delegates.observable(null as? Location)
_, _, newLoc ->
// log
此委托可帮助您观察属性的任何更改
【讨论】:
以上是关于如何在 Android (Kotlin) 中的 onSuccessListener 之外分配位置坐标?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android (Kotlin) 中的 onSuccessListener 之外分配位置坐标?
如何使用 Kotlin 在 android 中的 BottomNavigationView 上设置 OnNavigationItemListener?