如何将我的位置保存在全局变量中

Posted

技术标签:

【中文标题】如何将我的位置保存在全局变量中【英文标题】:How to save my location in a global variable 【发布时间】:2019-03-26 18:19:10 【问题描述】:

我通过以下方式获取 GPS 数据:

fusedLocationClient.lastLocation
            .addOnSuccessListener  location: Location? ->
                location2 = location
                var latitude =  location?.latitude
                var longitude = location?.longitude
                println(latitude)
                println(longitude)
                println("gps?")
                StopsFromWebservice().execute()
            

有效。 但我想以不同的方法使用该位置。所以我尝试定义

var location2 : Location? = null

并通过

调用它
fun FindClosestStops(location: Location?)
    for (i in 0..haltestellen_lat.size-1)
        var x=0.0
        var y=0.0
        var distance = 0.0
        x= (haltestellen_lat[i]-location?.latitude!!)*(haltestellen_lat[i]-location?.latitude!!)
        y= (haltestellen_lon[i]-location?.longitude!!)*(haltestellen_lon[i]-location?.longitude!!)
        distance = sqrt(x+y)
        StopDistances[i]= distance

        Haltestellen.add(distance.toString())

        println("distance = " + distance)
        println("FindClosestStops")
    
    SortDistance()
    time.post(UpdateView);

但随后 android Studio 用这个错误杀死了我的任务:

Caused by: kotlin.KotlinNullPointerException
    at com.xxx.yyy.zzz.FindClosestStops(fahrplanmap.kt:100)

正是这段代码:

 x= (haltestellen_lat[i]-location?.latitude!!)*(haltestellen_lat[i]-location?.latitude!!)

如何在 x 和 y 中写入我的位置数据?

【问题讨论】:

您最大的错误是依赖lastLocation,当您第一次启动应用程序时,它几乎总是为空。您必须预料到这一点并启动一个适当的位置侦听器,并在那里开始您需要来自onLocationChanged 的位置的操作(请参阅developer.android.com/guide/topics/location/strategies)。还尝试将位置和事物作为参数传递,例如StopsFromWebservice().execute(location)(请参阅用法developer.android.com/reference/android/os/AsyncTask,假设这是一个异步任务) 【参考方案1】:

您已将location 定义为可为空的,并使用可为空的访问器访问latitudelongitude。但是,紧接着您使用 non-nullable 运算符 !! 会产生错误。

简单地说,您要么需要检查 location 是否为 null 并在这种情况下定义行为,要么想办法确保在 location 为 null 时永远不会调用该方法。

【讨论】:

感谢您的快速答复。可悲的是,我对 kotlin 还很陌生,你知道如何在另一个函数中访问我的位置并将其存储在变量中吗?

以上是关于如何将我的位置保存在全局变量中的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Xcode 将我的所有代码编译两次,导致任何全局变量的链接器错误?

Staticthissuper关键字。

在LABVIEW中如何设置全局变量

php全局变量 超全局变量

PHP 全局变量 - 超全局变量

如何将破折号输入保存为全局变量