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

Android天气APP调用WeatherAPI时温度显示0.0℃的问题解决

Android天气APP温度始终显示0.0℃问题排查与解决

针对你开发的Android天气APP调用WeatherAPI的forecast.json接口后温度始终显示0.0℃的问题,以下是基于常见问题场景的排查方向和解决方案:

1. 实体类字段映射错误

这是最常见的原因:你的WeatherResponse实体类(包括嵌套的Current、Forecast等子类)的字段命名、类型或序列化注解与API返回的JSON结构不匹配,导致解析时无法正确赋值,最终显示默认值0.0。

排查点:

  • 对比WeatherAPI返回的JSON结构(用Postman测试接口获取),比如当前温度的路径是current.temp_c,检查实体类中对应的字段:
    • 是否添加了正确的序列化注解(比如Gson的@SerializedName("temp_c")),如果字段名和JSON键名不一致必须加注解;
    • 字段类型是否为double或Double,不能用int或Integer;
    • 嵌套类的层级是否正确,比如Current类是否作为WeatherResponse的一个成员变量存在。

示例正确的实体类片段:

public class WeatherResponse {
    @SerializedName("current")
    private Current current;

    // getter & setter
    public static class Current {
        @SerializedName("temp_c")
        private double tempC;

        // getter & setter
    }
}

2. Retrofit接口或ApiClient配置错误

如果请求头、请求参数或接口定义有误,会导致请求鉴权失败或返回错误数据,进而解析出异常值。

排查点:

  • 检查WeatherInterface的请求方法、参数、注解是否正确:
    public interface WeatherInterface {
        @GET("forecast.json")
        Call<WeatherResponse> getForecast(
            @Query("q") String city,
            @Query("days") int days,
            @Header("X-RapidAPI-Key") String apiKey,
            @Header("X-RapidAPI-Host") String host
        );
    }
    
  • 检查ApiClient中是否正确添加了请求头,注意大小写敏感,比如X-RapidAPI-Key不能写成X-RapidApi-Key;
  • 用Postman测试接口,传入相同的q、days参数和请求头,确认能返回正确的温度数据,排除API Key无效的问题。

3. 回调中未正确读取数据

即使请求成功,也可能因为读取字段的路径错误导致拿到默认值0.0。

排查点:

  • 在MainActivity的请求回调中添加日志,打印解析后的对象:
    @Override
    public void onResponse(Call<WeatherResponse> call, Response<WeatherResponse> response) {
        if (response.isSuccessful() && response.body() != null) {
            double temp = response.body().getCurrent().getTempC();
            Log.d("WeatherTemp", "当前温度:" + temp); // 查看日志是否有正确数值
            // 确认赋值给UI控件的是这个temp变量
            temperatureTextView.setText(temp + "℃");
        } else {
            // 打印错误信息,排查请求失败原因
            Log.e("WeatherError", "请求失败:" + response.errorBody());
        }
    }
    
  • 确认是否误读取了其他温度字段(比如预报的平均温度forecast.forecastday[0].day.avgtemp_c),而不是当前温度current.temp_c。

4. UI控件绑定错误

如果代码中绑定的控件ID与XML布局中的ID不匹配,会导致赋值操作无效,显示的是XML中设置的默认文本0.0℃。

排查点:

  • 检查XML布局中温度TextView的ID,比如android:id="@+id/tv_temperature";
  • 检查MainActivity中findViewById的ID是否一致,避免拼写错误。

排查步骤总结

  1. 用Postman测试接口,确认返回的JSON中current.temp_c有有效数值;
  2. 核对实体类的字段映射,确保注解、类型、层级正确;
  3. 检查Retrofit接口和ApiClient的请求配置,确保Headers和参数正确;
  4. 添加日志打印解析后的温度值,确认数据是否正确;
  5. 核对UI控件的绑定和赋值代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:58:22