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

Retrofit2调用API无内容返回问题:接口Query参数实现合理性咨询及空响应排查

解决Retrofit2调用WeatherStack API返回空响应的问题

我一眼就瞅出你代码里的几个核心问题,这就是拿不到有效响应的根源,咱们一步步来修正:

1. Retrofit接口的URL配置完全错误

你的@GET注解直接把access_key和query参数硬编码在路径里了,这既不符合Retrofit的参数规范,也搞错了WeatherStack的API端点——要获取实时温度的话,正确的端点是current。正确的姿势是:

  • @GET只写API的端点路径(比如current)
  • 用@Query分别传递access_key和query这两个参数,而非直接拼在URL里

修正后的接口代码:

public interface InterfaceCity {
    @GET("current")
    Call<CityAlternativa> getTemperature(
        @Query("access_key") String apiKey,
        @Query("query") String country
    );
}

2. 调用接口时遗漏了API密钥参数

原来的代码里根本没传递access_key,现在修正后调用时要把你的密钥传进去:

Call<CityAlternativa> call = interfaciciudad.getTemperature("a2a158295f55407eb8f9b88a957a5bac", ciudad);

3. 响应处理的逻辑有多个漏洞

你直接取response.body()却没做任何校验,而且直接把int类型的温度传给setText()会报错(setText只接受String类型),这些都得改:

call.enqueue(new Callback<CityAlternativa>() {
    @Override
    public void onResponse(Call<CityAlternativa> call, Response<CityAlternativa> response) {
        // 先判断响应是否成功,再确保body不为空
        if (response.isSuccessful() && response.body() != null) {
            CityAlternativa ciudadfinal = response.body();
            int temp = ciudadfinal.getTemperature();
            mostrarCiudad.setText(String.valueOf(temp)); // int转String后再设置文本
        } else {
            // 处理响应失败的情况,给用户明确提示
            mostrarCiudad.setText("响应失败,状态码:" + response.code());
        }
    }

    @Override
    public void onFailure(Call<CityAlternativa> call, Throwable t) {
        mostrarCiudad.setText("读取数据出错:" + t.getMessage());
        Log.i("ERROR DETAIL", t.toString());
    }
});

额外必查:你的CityAlternativa实体类是否匹配API返回结构

WeatherStack的温度字段嵌套在current对象里,所以你的实体类必须和JSON结构对应,比如用@SerializedName注解映射字段:

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

    public int getTemperature() {
        return current != null ? current.temperature : 0;
    }

    static class Current {
        @SerializedName("temperature")
        int temperature;
    }
}

调整完这些,你应该就能正常拿到温度数据了。

内容的提问来源于stack exchange,提问作者Moises Calatayud Guillem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:37:49