【发布时间】:2016-03-28 14:00:55
【问题描述】:
我是 Retrofit 的新手。我正在尝试使用 Retrofit 查询 OpenWeatherMap 并返回一些天气数据。
这是我的一些代码:
public static void getCurForecast(final Resources resources, final String zipCode, final String countryCode, final ForecastListener listener) {
new AsyncTask<Void, Void, CurForecastResponse>() {
@Override
protected CurForecastResponse doInBackground(Void... params) {
Log.d("TAG","in CurForecastResponse");
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://api.openweathermap.org")
.build();
//String zipCode = "78613";
//String countryCode = "us";
ForecastRequest service = restAdapter.create(ForecastRequest.class);
try {
String zipCodeFormat = zipCode + ",us";
Log.d("TAG","zipCodeFormat: " + zipCodeFormat);
CurForecastResponse temp = service.getCurForecast(zipCodeFormat, resources.getString(R.string.open_weather_api_key));
if(temp == null){
Log.d("TAG","TEMP = NULL!");
}
else {
Log.d("TAG","Weather: " + temp.name);
}
return temp;//service.getCurForecast(zipCodeFormat, resources.getString(R.string.open_weather_api_key));
} catch (RetrofitError error) {
Log.w("ForecastModule", "Forecast error: " + error.getMessage());
return null;
}
};
这是 JSON 对象的一部分:
public class CurForecastResponse {
public int cod;
public String base;
public String name;
public ForecastCurrently currently;
public ForecastHourly hourly;
public Weather main;
public CurForecastResponse() {
Log.d("TAG","CurForecastResponse Constructor");
}
public class weather {
int id;
String main;
String description;
String icon;
public weather(int id, String main, String description, String icon) {
this.id = id;
this.main = main;
this.description = description;
this.icon = icon;
}
public int getId() {return id; }
public String getDescription() {return description; }
public String getIcon() {return icon; }
public String getMain() {return main; }
}
这是 ForecastRequest 类
public interface ForecastRequest {
//Open Weather Forecast API
@GET("/data/2.5/weather?")
CurForecastResponse getCurForecast(@Query("zip") String zipCode,
@Query("apiKey") String apiKey);
}
这是 JSON 响应的示例
{"coord":{"lon":145.77,"lat":-16.92},
"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02d"}],
"base":"cmc stations",
"main":{"temp":305.15,"pressure":1013,"humidity":52,"temp_min":305.15,"temp_max":305.15},"wind":{"speed":5.7,"deg":40},"clouds":{"all":20},"dt":1459137600,"sys":{"type":1,"id":8166,"message":0.0092,"country":"AU","sunrise":1459110134,"sunset":1459153277},"id":2172797,"name":"Cairns","cod":200}
我在将数据输入天气类时遇到了一些问题。
【问题讨论】:
-
请说明您正在使用的改造版本。
-
我使用的版本是v1.9
-
必须为要放入的数据创建一个数组.. duh...
-
必须为我的对象创建一个数组才能进入。see
标签: java android json retrofit