如何在 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官方开发语言

如何使用 Kotlin 在 android 中的 BottomNavigationView 上设置 OnNavigationItemListener?

工具栏中的问题设置颜色(android-kotlin)

Kotlin 入门环境搭建

改善 Kotlin 开发体验;让 Android P 更加智能... | 2018 Google I/O 亮点汇总