You need to enable JavaScript to run this app. 调用WeatherStack API获取JSON时遇致命空指针异常,怀疑URL构造有误
优惠活动
大模型
产品
解决方案
定价
更多

调用WeatherStack API获取JSON时遇致命空指针异常,怀疑URL构造有误

接口请求构造与空指针问题排查

已定位的代码偏差与问题根因

  • 按照现有代码逻辑,Retrofit实际拼接生成的完整请求地址为:https://api.weatherstack.com/current?query=传入的地点参数&lang=en&access_key=111111111111111,和你参考的示例请求存在两处影响结果的偏差:
    1. 参考示例中的语言参数为首字母大写的Lang,代码中Retrofit接口声明的查询参数为全小写lang,若服务端对该参数大小写敏感,会导致语言参数不被服务端识别
    2. 示例请求使用http协议,代码中使用的https协议本身无逻辑错误,但占位值格式的access_key为无效值时,服务端会直接返回错误结构的JSON,不存在预期的天气数据字段
  • 空指针的直接触发逻辑:Gson解析时对JSON中缺失的字段会默认赋值为null。当服务端返回错误响应(比如access_key无效、查询地点不存在、请求触发频率限制)时,返回的JSON结构中没有current天气实体字段,此时解析得到的CurrentWeatherResponse对象中,CurrentWeatherEntry类型的属性会为null,后续直接调用该空对象的toString()方法就会抛出你碰到的异常。

验证与修复方向

  • 在拦截器中增加日志,打印最终拼接完成的完整请求URL,直接将该URL在浏览器中访问,核对返回的JSON结构:如果返回内容包含success: false和error字段,说明当前使用的access_key为占位无效值,需要替换为平台申请的有效密钥
  • 在读取天气实体字段前增加非空校验,先确认返回的响应对象、内部天气实体均不为null,再进行后续的UI绑定操作
  • 按照服务端接口文档要求的参数名,调整Retrofit@Query注解的参数大小写,避免因参数不匹配导致服务端识别失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 09:36:11