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

为何从Google Places API获取的Locale始终为null?

关于Google Places API获取Place对象Locale为null的问题

我来帮你梳理下这个问题的原因和解决办法:

首先要明确:Place对象本身并没有一个直接返回完整Locale的字段,你拿到null是因为默认请求的字段里不包含语言/地区相关的信息,而且Places SDK也不会自动填充这个值。你能正常获取名称、地址、经纬度,是因为这些属于默认请求的基础字段,但Locale相关数据需要你主动指定请求。

下面是具体的解决思路:

  • 主动请求语言代码字段
    在调用fetchPlace()获取地点详情时,你需要明确添加Place.Field.LANGUAGE_CODE到请求字段列表中,这样才能拿到地点对应的语言代码,再用这个代码构建Locale。示例代码如下:

    // 构建需要请求的字段列表,加入LANGUAGE_CODE
    val requiredFields = listOf(
        Place.Field.NAME,
        Place.Field.ADDRESS,
        Place.Field.LAT_LNG,
        Place.Field.LANGUAGE_CODE,
        Place.Field.COUNTRY // 可选,用来获取国家代码,构建更准确的Locale
    )
    
    val fetchRequest = FetchPlaceRequest.newInstance(placeId, requiredFields)
    placesClient.fetchPlace(fetchRequest)
        .addOnSuccessListener { response ->
            val targetPlace = response.place
            targetPlace.languageCode?.let { langCode ->
                // 如果有国家代码,可以结合起来构建完整Locale
                val countryCode = targetPlace.country
                val locale = if (countryCode != null) {
                    Locale(langCode, countryCode)
                } else {
                    Locale(langCode)
                }
                // 这里就可以使用构建好的locale了
            } ?: run {
                // 如果语言代码为空,可以考虑用设备Locale作为 fallback
                val fallbackLocale = Locale.getDefault()
            }
        }
    
  • 通过地点属性推断Locale
    如果某些地点没有返回语言代码,你可以通过获取地点的国家/地区信息(请求Place.Field.COUNTRY或Place.Field.ADMINISTRATIVE_AREA),结合常见的地区语言来推断Locale。比如拿到国家代码"FR",就可以默认使用Locale.FRENCH。

  • 关于API密钥的疑问
    你用之前Maps的API密钥是没问题的,只要在Google Cloud Console里已经启用了Places SDK for Android,并且密钥的限制(应用签名、包名)配置正确——毕竟你已经能拿到其他地点数据,说明API调用是正常的,所以密钥不是导致Locale为null的原因。

最后补充:部分小众地点可能确实没有关联的语言代码,这种情况下建议用设备默认Locale作为备选方案,保证功能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:27:40