如何从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
相关产品推荐
相关产品推荐

