You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Places AutoComplete Fragment返回结果中提取经纬度?

解决Places Autocomplete提取LatLng经纬度的问题

首先,你遇到的语法错误是因为Place.latLng是可空类型(在Google Places SDK中,这个字段被标记为@Nullable),所以不能直接用!!latitude的写法——正确的访问方式应该是通过安全调用操作符?.来访问latitude和longitude属性。

一、纠正结果处理代码的语法错误

把你原来的错误写法替换成下面的正确代码:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == AUTOCOMPLETE_REQUEST_CODE_DESTINATION && resultCode == Activity.RESULT_OK) {
        data?.let {
            val place = Autocomplete.getPlaceFromIntent(it)
            // 安全提取经纬度,避免空指针
            val latLng = place.latLng
            latLng?.let {
                val latitude = it.latitude
                val longitude = it.longitude
                // 这里可以使用经纬度做后续操作
                Log.d("PlaceInfo", "纬度: $latitude, 经度: $longitude")
            } ?: run {
                // 处理latLng为空的情况
                Log.w("PlaceInfo", "未获取到有效经纬度")
            }
        }
    }
}

关键说明:

  • place.latLng是可空的,所以先用?.let判空,确保不为空时再访问latitude和longitude
  • 不要直接用!!强制非空,否则如果返回的Place没有经纬度数据(比如某些纯地址类地点),会抛出空指针异常

二、确认依赖是否完整

你已经添加了play-services-maps,但还需要确保添加了Places SDK的依赖(因为Autocomplete功能属于Places模块),在你的build.gradle(Module级别)中补充:

implementation 'com.google.android.gms:play-services-places:17.0.0'

注意:如果你使用的是较新版本的Google Places SDK(比如Jetpack版本的com.google.android.libraries.places:places:X.X.X),API调用方式会略有不同,但你当前的代码是基于旧版play-services-places的,所以保持这个依赖即可。

三、额外检查点

  • 确认你在Google Cloud控制台已经启用了Places API,并且在AndroidManifest.xml中配置了正确的API密钥:
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="你的API密钥"/>
    
  • 确保你请求的Place.Field.LAT_LNG已经正确包含在fields列表中(你当前的代码已经包含了,这部分没问题)

内容的提问来源于stack exchange,提问作者MilkBottle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:47:45