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

无法向ArrayList添加值?Gmaps API数据存储异常求助

排查GMaps API结果存入ArrayList时手机号为空的问题

听起来你碰到了个有点诡异的小bug——明明GMaps API返回的res里手机号是对的,存到result_phone这个ArrayList里就变成空的了,可result_name却能正常输出,这确实让人挠头。我来帮你梳理几个最可能的排查方向和解决办法:

1. 先确认JSON层级是否正确(最常见原因)

GMaps Place Details API的响应结构里,international_phone_number是嵌套在result这个子JSONObject里的,不是直接在顶层响应里。如果你的checkEmptyJsonResponse工具类传入的是顶层的res对象,而不是res.getJSONObject("result"),那肯定拿不到手机号,返回的就是空或者你设置的“Not Available”。

举个正确的调用示例:

// 从API响应中取出result子对象
JSONObject placeResult = res.getJSONObject("result");

// 获取名称(正常工作的逻辑,参考这个)
String placeName = checkEmptyJsonResponse(placeResult, "name");
result_name.add(placeName);

// 获取手机号(必须和名称用同一个子对象!)
String placePhone = checkEmptyJsonResponse(placeResult, "international_phone_number");
result_phone.add(placePhone);

2. 检查自定义工具类checkEmptyJsonResponse的逻辑

你说这个类会返回JSON值或“Not Available”,那得确保它的逻辑没有漏洞:

  • 有没有处理JSONException?比如键不存在的时候会不会抛出异常导致返回空?
  • 有没有同时判断obj.has(key)和!obj.isNull(key)?有些情况下键存在但值是null,这时候也要返回“Not Available”。

推荐的工具类实现参考:

public static String checkEmptyJsonResponse(JSONObject obj, String key) {
    try {
        // 同时检查键存在且值不为null
        if (obj.has(key) && !obj.isNull(key)) {
            return obj.getString(key);
        }
        return "Not Available";
    } catch (JSONException e) {
        // 捕获异常,避免崩溃,返回默认值
        e.printStackTrace();
        return "Not Available";
    }
}

3. 排查ArrayList的操作时机和初始化

  • 确保result_phone已经正确初始化:ArrayList<String> result_phone = new ArrayList<>();,如果是null的话add操作会抛异常,但你说日志是空,可能是初始化了但没正确添加元素?
  • 检查日志输出的时机:是不是在result_phone.add(placePhone)之前就打印了result_phone.toString()?那时候列表当然是空的!建议在添加后立刻打印列表,或者单独打印placePhone的值,确认工具类返回的内容:
Log.d("DebugPhone", "工具类返回的手机号:" + placePhone);
result_phone.add(placePhone);
Log.d("DebugList", "添加后的手机号列表:" + result_phone.toString());

4. 确认API权限和响应字段

虽然你说res值正确,但还是可以确认下请求的Place Details API有没有请求到international_phone_number字段——GMaps API需要指定fields参数,如果你没包含formatted_phone_number或international_phone_number,那响应里就不会有这个字段。比如请求URL里要加&fields=name,international_phone_number。

按照上面的步骤一步步排查,应该能很快找到问题所在!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:33:07