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的一个成员变量存在。
- 是否添加了正确的序列化注解(比如Gson的
示例正确的实体类片段:
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是否一致,避免拼写错误。
排查步骤总结
- 用Postman测试接口,确认返回的JSON中
current.temp_c有有效数值; - 核对实体类的字段映射,确保注解、类型、层级正确;
- 检查Retrofit接口和ApiClient的请求配置,确保Headers和参数正确;
- 添加日志打印解析后的温度值,确认数据是否正确;
- 核对UI控件的绑定和赋值代码。
内容的提问来源于stack exchange,提问作者Babariya Rutviksinh
相关产品推荐
相关产品推荐

