gpt4 book ai didi

android - 使用 Retrofit2 解析 API 时获取 null

转载 作者:行者123 更新时间:2023-11-30 00:09:37 25 4
gpt4 key购买 nike

当直接在我的浏览器中输入这个时(删除了 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,"humidity":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","cod":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);
}

和我的 Activity

 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();
}
});

我收到回复,但 toast 显示为空。

最佳答案

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

public class RootObject {

private CoordObject coord;

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

public CoordObject getCoordinates(){
return coord;
}
}

现在你的接口(interface)应该返回一个RootObject:

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

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

关于android - 使用 Retrofit2 解析 API 时获取 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48357495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com