当直接输入到我的浏览器中时(删除了appId)


  http://api.openweathermap.org/data/2.5/weather?q=37421&appid=xxxx


我得到这个预期的回应


  {“ coord”:{“ lon”:73,“ lat”:31.32},“ weather”:[{“ id”:800,“ main”:“ Clear”,“ description”:“ clear sky”,“ icon “:” 01n“}],” base“:” stations“,” main“:{” temp“:286.471,” pressure“:1007.05,”湿度“:86,” temp_min“:286.471,” temp_max“:286.471 ,“ sea_level”:1028.03,“ grnd_level”:1007.05},“ wind”:{“ speed”:3.01,“ deg”:252.003},“ clouds”:{“ all”:0},“ dt”:1516458282, “ sys”:{“ message”:0.0035,“ country”:“ PK”,“ sunrise”:1516413964,“ sunset”:1516451547},“ id”:1179400,“ name”:“ Chak 247 RB Miani”,“鳕鱼”:200}


我想要得到的只是纬度和经度坐标。

这是我的模特

public class CoordObject {
    private String lat;
    private String lon;

    public CoordObject(
            String lat,
            String lon({
        this.lat =lat;
        this.lon =lon;
    }

    public String getLat(){
        return lat;
    }
    public String getLon(){
        return lon;
    }
}


和我的界面

public interface OwmInterface {

@GET("/data/2.5/weather")
Call<CoordObject> getCoord(@Query("q") String zipCode,
                           @Query("appid") String appId);
}


和我的活动

 final String BASE_URL = "https://api.openweathermap.org/";
    final String API_KEY_OWM = "xxxx";

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    OwmInterface request = retrofit.create(OwmInterface.class);

    Call<CoordObject> call = request.getCoord(
            "37421",
            API_KEY_OWM
    );

    call.enqueue(new Callback<CoordObject>() {
        @Override
        public void onResponse(Call<CoordObject> call, Response<CoordObject> response){
            CoordObject coordObjectResponse = response.body();
            Toast.makeText(MainActivity.this, coordObjectResponse.getLat(), Toast.LENGTH_LONG).show();
            Toast.makeText(MainActivity.this, coordObjectResponse.getLon(), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onFailure(Call<CoordObject> call, Throwable t) {
                Toast.makeText(MainActivity.this, "failed" +t, Toast.LENGTH_SHORT).show();
            }
    });


我得到回应,但吐司显示为空。

最佳答案

作为根的对象包含您的CoordObject
您应该再创建一个类:

public class RootObject {

    private CoordObject coord;

    public RootObject(CoordObject coord){
        this.coord = coord
    }

    public CoordObject getCoordinates(){
        return coord;
    }
}


现在,您的界面应该返回RootObject

@GET("/data/2.5/weather")
Call<RootObject> getCoord(@Query("q") String zipCode,
                           @Query("appid") String appId);


还要检查latlon是否来自类型double而不是String

08-06 08:45