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

Android Studio(Java)天气APP调用WeatherAPI失败,始终触发onErrorResponse

问题排查与解决方案

以下是针对你用Volley调用WeatherAPI始终触发onErrorResponse的排查步骤:

1. 替换占位API密钥

代码里的API_KEY是占位符,必须替换成你从WeatherAPI官网获取的有效密钥。如果密钥无效,API会返回401错误,直接进入错误回调。

2. 改用HTTPS协议

WeatherAPI现在强制要求HTTPS访问,你当前用的是http://,会导致请求被拦截。把URL开头改成https://:

String url = "https://api.weatherapi.com/v1/forecast.json?key=你的密钥&q="+cityName+"&days=1&aqi=no&alerts=no";

3. 对城市名进行URL编码

直接拼接城市名到URL会有格式问题(比如带空格的城市名"Los Angeles"),需要用URLEncoder处理:

try {
    String encodedCity = URLEncoder.encode(cityName, "UTF-8");
    String url = "https://api.weatherapi.com/v1/forecast.json?key=你的密钥&q="+encodedCity+"&days=1&aqi=no&alerts=no";
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

4. 打印错误详情定位问题

当前错误回调只提示无效城市,但Volley的error对象包含具体错误信息。修改onErrorResponse,打印日志看真实错误:

@Override
public void onErrorResponse(VolleyError error) {
    // 打印状态码和错误响应内容
    if (error.networkResponse != null) {
        Log.e("WeatherError", "状态码: " + error.networkResponse.statusCode);
        try {
            String errorContent = new String(error.networkResponse.data, "UTF-8");
            Log.e("WeatherError", "错误内容: " + errorContent);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
    // 提示具体错误信息
    Toast.makeText(MainActivity.this, "请求失败: " + error.getMessage(), Toast.LENGTH_SHORT).show();
}

常见错误码对应问题:

  • 401:API密钥无效或过期
  • 400:参数错误(比如城市名格式不对)
  • 403:访问权限被限制
  • 无网络响应:设备没联网或网络权限缺失

5. 检查网络权限

确保AndroidManifest.xml里添加了网络权限:

<uses-permission android:name="android.permission.INTERNET" />

6. 解决Android 9+明文网络限制

如果你的APP目标SDK是28及以上,默认禁止明文HTTP请求。除了改用HTTPS,也可以配置网络安全策略允许访问WeatherAPI域名:

  1. 在res/xml目录下创建network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">api.weatherapi.com</domain>
    </domain-config>
</network-security-config>
  1. 在AndroidManifest.xml的application标签添加配置:
<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:35:21