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

Kotlin Android集成Google Places自动补全时触发空指针异常

解决Google Places Autocomplete的Kotlin空指针问题

嘿,我帮你分析下这个空指针问题的根源,以及怎么修复它!

你遇到的kotlin.KotlinNullPointerException是因为place.latLng本身就是null,而你用!!强制非空导致的。问题出在两个核心环节:

1. 没有在Autocomplete请求中指定获取经纬度字段

Google Places Autocomplete不会默认返回所有Place字段,你必须在启动Intent的时候明确声明需要Place.Field.LAT_LNG,否则place.latLng就会是null。

先检查你启动Autocomplete的代码,确保它包含了LatLng字段,比如:

// 必须明确指定需要的字段,包括LAT_LNG
val requiredFields = listOf(Place.Field.ID, Place.Field.NAME, Place.Field.LAT_LNG)
val autocompleteIntent = Autocomplete.IntentBuilder(
    AutocompleteActivityMode.OVERLAY, // 根据你的需求选合适的模式
    requiredFields
).build(this)
startActivityForResult(autocompleteIntent, AUTOCOMPLETE_REQUEST_CODE)

这一步是关键,没有声明的话,无论怎么判断place是否非空,latLng都拿不到有效数值。

2. 避免用!!强制非空,改用安全的空处理逻辑

即使你指定了字段,也可能存在某些特殊地点没有精确经纬度的情况(比如大范围的行政区域),所以永远不要用!!来强制非空,改用安全调用和空处理:

修改你的onActivityResult里的逻辑:

if (PLACE_PICKING_MODE == 1) {
    place?.latLng?.let { selectedLatLng ->
        fromLocation = selectedLatLng
        val theIcon = R.drawable.gps_default
        placeMarkerOnMap(fromLocation, theIcon)
        map.animateCamera(CameraUpdateFactory.newLatLngZoom(fromLocation, 17f))
    } ?: run {
        // 处理没有获取到经纬度的情况,比如给用户提示
        Toast.makeText(this, "无法获取该地点的精确位置", Toast.LENGTH_SHORT).show()
    }
} else if (PLACE_PICKING_MODE == 2) {
    place?.latLng?.let { selectedLatLng ->
        toLocation = selectedLatLng
        val theIcon = R.drawable.gps_default
        placeMarkerOnMap(toLocation, theIcon)
        map.animateCamera(CameraUpdateFactory.newLatLngZoom(toLocation, 17f))
    } ?: run {
        Toast.makeText(this, "无法获取该地点的精确位置", Toast.LENGTH_SHORT).show()
    }
}

这样一来,只有当place和place.latLng都不为null的时候,才会执行标记地图和移动相机的逻辑;如果latLng为空,会触发友好提示,避免空指针崩溃。

额外检查点

  • 确保你的map对象已经初始化完成,不会在执行animateCamera的时候为空
  • 确认你的Google Places API密钥已经正确配置,并且在Google Cloud控制台启用了Places API服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:19:03