【问题标题】:Android - Forecast.io - Retrofit - Set query when api doesn't require parameter name, just valuesAndroid - Forecast.io - Retrofit - 当 api 不需要参数名称时设置查询,只需要值
【发布时间】:2016-11-08 19:30:25
【问题描述】:

我正在使用 Forecast.io 来获取天气。 api url 如下: https://api.forecast.io/forecast/abf7afb3c49204d542b14e8ba282a188/37.8267,-122.423

调用 API WeatherAPI.Factory.getmWeatherAPI().getWeather(48.8566,2.3522).enqueue(new Callback()

API url 中不需要名称来表示经度和纬度。

我正在尝试这个,但 Retrofit 似乎添加了特殊字符 - (见下面的屏幕)

@GET("forecast/")
    Call<Weather> getWeather(
            @Query("") Double longitude,
            @Query("") Double latitude);

调用的 URL 是并导致 404

非常感谢您的帮助,

【问题讨论】:

    标签: android api http-status-code-404 retrofit


    【解决方案1】:

    首先,您在日志中的 url 是错误的 - 您应该交换“预测”和哈希键“abf7afb3c49204d542b14e8ba282a188”,所以我想您应该将 baseUrl 更改为 https://api.forecast.io,例如,在构建 Retrofit 对象时.

    其次,错误是你使用了@Query注解,但它不是查询,它是url路径的一部分,所以你应该使用@Path注解,你的调用应该是这样的(假设你的baseUrl 是https://api.forecast.io):

    @GET("/forecast/abf7afb3c49204d542b14e8ba282a188/{location}")
    Call<Weather> getWeather(@Path("location") String location);
    

    那么你可以通过下一个方式使用这个方法:

    double lat = 48.8566;
    double lng = 2.3522;
    WeatherAPI.Factory.getmWeatherAPI().getWeather(lat + "," + lng).enqueue(new Callback());
    

    【讨论】:

    • 非常感谢您的帮助。测试和批准。真的!
    • 不客气。如果对您有帮助,您可以接受答案。
    猜你喜欢
    • 2022-11-18
    • 2015-09-28
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多