android xml 解析天气,Retrofit2解析天气API XML接口
栗子:
友情提示:這是本人初次接觸的記錄篇,有坑是正常現象,歡迎指出。
具體返回格式:
北京
13:35
29
4級
28%
南風
04:59
19:23
72
52
極少數敏感人群應減少戶外活動
良
顆粒物(PM2.5)
162
1
90
9
33
13:00:00
10101
2017-05-04 19:30:00
15日星期一
高溫 28℃
低溫 15℃
晴
南風
微風
多云
南風
微風
16日星期二
高溫 32℃
低溫 17℃
多云
南風
3-4級
晴
西北風
微風級
17日星期三
高溫 34℃
低溫 19℃
晴
南風
微風級
晴
南風
微風級
18日星期四
高溫 35℃
低溫 22℃
晴
南風
微風級
多云
南風
微風級
19日星期五
高溫 35℃
低溫 22℃
多云
南風
微風級
晴
南風
微風級
20日星期六
高溫 34℃
低溫 21℃
晴
南風
3-4級
多云
南風
微風級
晨練指數
較適宜
早晨氣象條件較適宜晨練,但風力稍大,晨練時請注意選擇避風的地點,避免迎風鍛煉。
舒適度
較不舒適
白天天氣多云,同時會感到有些熱,不很舒適。
穿衣指數
炎熱
天氣炎熱,建議著短衫、短裙、短褲、薄型T恤衫等清涼夏季服裝。
感冒指數
少發
各項氣象條件適宜,發生感冒機率較低。但請避免長期處于空調房間中,以防感冒。
晾曬指數
適宜
天氣不錯,適宜晾曬。趕緊把久未見陽光的衣物搬出來吸收一下太陽的味道吧!
旅游指數
適宜
天氣較好,溫度稍高,幸好風稍大,會緩解稍熱的天氣。適宜旅游,可不要錯過機會呦!
紫外線強度
中等
屬中等強度紫外線輻射天氣,外出時建議涂擦SPF高于15、PA+的防曬護膚品,戴帽子、太陽鏡。
洗車指數
較適宜
較適宜洗車,未來一天無雨,風力較小,擦洗一新的汽車至少能保持一天。
運動指數
較適宜
天氣較好,但風力較大,推薦您進行室內運動,若在戶外運動請注意防風。
約會指數
較不適宜
天氣較好,且室外有風,外出約會可能會讓戀人受些苦,最好在溫暖的室內促膝談心。
雨傘指數
不帶傘
天氣較好,不會降水,因此您可放心出門,無須帶雨傘。
錯誤回調:
400
Check the parameters.
步驟一:
導包:
api 'com.squareup.retrofit2:retrofit:2.4.0'
api 'com.squareup.retrofit2:converter-simplexml:2.4.0'
步驟二:
開始解析創建對象,要解析你就得先完成這步,不然你解析成空氣啊。
完全解析:
這邊為了省事直接寫在一個文件中了,然后有點長,但這是為了方便你們Copy.
注意事項:解析對象不能是內部類
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import java.util.List;
/**
* Created by 奈蜇 on 2018-07-25.
* RespWeather
*/
@Root(name = "resp",strict = false)
public class RespWeather {
@Element(name = "city",required = false)
String city;
@Element(name = "updatetime",required = false)
String updatetime;
@Element(name = "wendu",required = false)
int wendu;
@Element(name = "fengli",required = false)
String fengli;
@Element(name = "shidu",required = false)
String shidu;
@Element(name = "fengxiang",required = false)
String fengxiang;
@Element(name = "sunrise_1",required = false)
String sunrise_1;
@Element(name = "sunset_1",required = false)
String sunset_1;
@Element(name = "sunrise_2",required = false)
String sunrise_2;
@Element(name = "sunset_2",required = false)
String sunset_2;
@Element(name = "environment",required = false)
Environment environment;
@Element(name = "alarm",required = false)
Alarm alarm;
@Element(name = "yesterday",required = false)
Yesterday yesterday;
@Element(name = "forecast",required = false)
Forecast forecast;
@Element(name = "zhishus",required = false)
Zhishus zhishus;
@Element(name = "status",required = false)
int status;
@Element(name = "error",required = false)
String error;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getUpdatetime() {
return updatetime;
}
public void setUpdatetime(String updatetime) {
this.updatetime = updatetime;
}
public int getWendu() {
return wendu;
}
public void setWendu(int wendu) {
this.wendu = wendu;
}
public String getFengli() {
return fengli;
}
public void setFengli(String fengli) {
this.fengli = fengli;
}
public String getShidu() {
return shidu;
}
public void setShidu(String shidu) {
this.shidu = shidu;
}
public String getFengxiang() {
return fengxiang;
}
public void setFengxiang(String fengxiang) {
this.fengxiang = fengxiang;
}
public String getSunrise_1() {
return sunrise_1;
}
public void setSunrise_1(String sunrise_1) {
this.sunrise_1 = sunrise_1;
}
public String getSunset_1() {
return sunset_1;
}
public void setSunset_1(String sunset_1) {
this.sunset_1 = sunset_1;
}
public String getSunrise_2() {
return sunrise_2;
}
public void setSunrise_2(String sunrise_2) {
this.sunrise_2 = sunrise_2;
}
public String getSunset_2() {
return sunset_2;
}
public void setSunset_2(String sunset_2) {
this.sunset_2 = sunset_2;
}
public Environment getEnvironment() {
return environment;
}
public void setEnvironment(Environment environment) {
this.environment = environment;
}
public Alarm getAlarm() {
return alarm;
}
public void setAlarm(Alarm alarm) {
this.alarm = alarm;
}
public Yesterday getYesterday() {
return yesterday;
}
public void setYesterday(Yesterday yesterday) {
this.yesterday = yesterday;
}
public Forecast getForecast() {
return forecast;
}
public void setForecast(Forecast forecast) {
this.forecast = forecast;
}
public Zhishus getZhishus() {
return zhishus;
}
public void setZhishus(Zhishus zhishus) {
this.zhishus = zhishus;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
}
@Root(name = "environment",strict = false)
class Environment{
@Element(name = "aqi",required = false)
int aqi;
@Element(name = "pm25",required = false)
int pm25;
@Element(name = "suggest",required = false)
String suggest;
@Element(name = "quality",required = false)
String quality;
@Element(name = "MajorPollutants",required = false)
String MajorPollutants;
@Element(name = "o3",required = false)
int o3;
@Element(name = "co",required = false)
int co;
@Element(name = "pm10",required = false)
int pm10;
@Element(name = "so2",required = false)
int so2;
@Element(name = "no2",required = false)
int no2;
@Element(name = "time",required = false)
String time;
public int getAqi() {
return aqi;
}
public void setAqi(int aqi) {
this.aqi = aqi;
}
public int getPm25() {
return pm25;
}
public void setPm25(int pm25) {
this.pm25 = pm25;
}
public String getSuggest() {
return suggest;
}
public void setSuggest(String suggest) {
this.suggest = suggest;
}
public String getQuality() {
return quality;
}
public void setQuality(String quality) {
this.quality = quality;
}
public String getMajorPollutants() {
return MajorPollutants;
}
public void setMajorPollutants(String majorPollutants) {
MajorPollutants = majorPollutants;
}
public int getO3() {
return o3;
}
public void setO3(int o3) {
this.o3 = o3;
}
public int getCo() {
return co;
}
public void setCo(int co) {
this.co = co;
}
public int getPm10() {
return pm10;
}
public void setPm10(int pm10) {
this.pm10 = pm10;
}
public int getSo2() {
return so2;
}
public void setSo2(int so2) {
this.so2 = so2;
}
public int getNo2() {
return no2;
}
public void setNo2(int no2) {
this.no2 = no2;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
@Root(name = "alarm",strict = false)
class Alarm{
@Element(name = "cityKey",required = false)
int cityKey;
@Element(name = "cityName",required = false)
String cityName;
@Element(name = "alarmType",required = false)
String alarmType;
@Element(name = "alarmDegree",required = false)
String alarmDegree;
@Element(name = "alarmText",required = false)
String alarmText;
@Element(name = "alarm_details",required = false)
String alarm_details;
@Element(name = "standard",required = false)
String standard;
@Element(name = "suggest",required = false)
String suggest;
@Element(name = "imgUrl",required = false)
String imgUrl;
@Element(name = "time",required = false)
String time;
public int getCityKey() {
return cityKey;
}
public void setCityKey(int cityKey) {
this.cityKey = cityKey;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public String getAlarmType() {
return alarmType;
}
public void setAlarmType(String alarmType) {
this.alarmType = alarmType;
}
public String getAlarmDegree() {
return alarmDegree;
}
public void setAlarmDegree(String alarmDegree) {
this.alarmDegree = alarmDegree;
}
public String getAlarmText() {
return alarmText;
}
public void setAlarmText(String alarmText) {
this.alarmText = alarmText;
}
public String getAlarm_details() {
return alarm_details;
}
public void setAlarm_details(String alarm_details) {
this.alarm_details = alarm_details;
}
public String getStandard() {
return standard;
}
public void setStandard(String standard) {
this.standard = standard;
}
public String getSuggest() {
return suggest;
}
public void setSuggest(String suggest) {
this.suggest = suggest;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
@Root(name = "yesterday",strict = false)
class Yesterday{
@Element(name = "date_1",required = false)
String date_1;
@Element(name = "high_1",required = false)
String high_1;
@Element(name = "low_1",required = false)
String low_1;
@Element(name = "day_1",required = false)
Day_1 day_1;
@Element(name = "night_1",required = false)
Night_1 night_1;
public String getDate_1() {
return date_1;
}
public void setDate_1(String date_1) {
this.date_1 = date_1;
}
public String getHigh_1() {
return high_1;
}
public void setHigh_1(String high_1) {
this.high_1 = high_1;
}
public String getLow_1() {
return low_1;
}
public void setLow_1(String low_1) {
this.low_1 = low_1;
}
public Day_1 getDay_1() {
return day_1;
}
public void setDay_1(Day_1 day_1) {
this.day_1 = day_1;
}
public Night_1 getNight_1() {
return night_1;
}
public void setNight_1(Night_1 night_1) {
this.night_1 = night_1;
}
}
@Root(name = "day_1",strict = false)
class Day_1{
@Element(name = "type_1",required = false)
String type_1;
@Element(name = "fx_1",required = false)
String fx_1;
@Element(name = "fl_1",required = false)
String fl_1;
public String getType_1() {
return type_1;
}
public void setType_1(String type_1) {
this.type_1 = type_1;
}
public String getFx_1() {
return fx_1;
}
public void setFx_1(String fx_1) {
this.fx_1 = fx_1;
}
public String getFl_1() {
return fl_1;
}
public void setFl_1(String fl_1) {
this.fl_1 = fl_1;
}
}
@Root(name = "night_1",strict = false)
class Night_1{
@Element(name = "type_1",required = false)
String type_1;
@Element(name = "fx_1",required = false)
String fx_1;
@Element(name = "fl_1",required = false)
String fl_1;
public String getType_1() {
return type_1;
}
public void setType_1(String type_1) {
this.type_1 = type_1;
}
public String getFx_1() {
return fx_1;
}
public void setFx_1(String fx_1) {
this.fx_1 = fx_1;
}
public String getFl_1() {
return fl_1;
}
public void setFl_1(String fl_1) {
this.fl_1 = fl_1;
}
}
@Root(name = "forecast",strict = false)
class Forecast{
@ElementList(name = "weather" ,inline = true )
List weatherList;
public List getWeatherList() {
return weatherList;
}
public void setWeatherList(List weatherList) {
this.weatherList = weatherList;
}
}
@Root(name = "weather",strict = false)
class Weather{
@Element(name = "date",required = false)
String date;
@Element(name = "high",required = false)
String high;
@Element(name = "low",required = false)
String low;
@Element(name = "day",required = false)
Day day;
@Element(name = "night",required = false)
Night night;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getHigh() {
return high;
}
public void setHigh(String high) {
this.high = high;
}
public String getLow() {
return low;
}
public void setLow(String low) {
this.low = low;
}
public Day getDay() {
return day;
}
public void setDay(Day day) {
this.day = day;
}
public Night getNight() {
return night;
}
public void setNight(Night night) {
this.night = night;
}
}
@Root(name = "day",strict = false)
class Day{
@Element(name = "type",required = false)
String type;
@Element(name = "fengxiang",required = false)
String fengxiang;
@Element(name = "fengli",required = false)
String fengli;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getFengxiang() {
return fengxiang;
}
public void setFengxiang(String fengxiang) {
this.fengxiang = fengxiang;
}
public String getFengli() {
return fengli;
}
public void setFengli(String fengli) {
this.fengli = fengli;
}
}
@Root(name = "night",strict = false)
class Night{
@Element(name = "type",required = false)
String type;
@Element(name = "fengxiang",required = false)
String fengxiang;
@Element(name = "fengli",required = false)
String fengli;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getFengxiang() {
return fengxiang;
}
public void setFengxiang(String fengxiang) {
this.fengxiang = fengxiang;
}
public String getFengli() {
return fengli;
}
public void setFengli(String fengli) {
this.fengli = fengli;
}
}
@Root(name = "zhishus",strict = false)
class Zhishus{
@ElementList(name = "zhishu" ,inline = true )
List zhishuList;
public List getZhishuList() {
return zhishuList;
}
public void setZhishuList(List zhishuList) {
this.zhishuList = zhishuList;
}
}
@Root(name = "zhishu",strict = false)
class Zhishu{
@Element(name = "name",required = false)
String name;
@Element(name = "value",required = false)
String value;
@Element(name = "detail",required = false)
String detail;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
}
好了,看了的同志肯定有這樣的疑問:
@Root(name = "resp",strict = false)
@Element(name = "city",required = false)
@ElementList(name = "weather" ,inline = true )
這些注解都是什么意思:
我這邊簡單描述下:使用了retrofit2的simplexml插件,然后都是字面意思。
@Root : 根節點
@Element :元素
@ElementList :元素列表
name="XXXX":是指,在xml中的名字,必須完全相同。
strict = false:xml中有元素,而實體類中沒有的時候設置為false.
required = false:實體類中有,xml中沒有,且聲明為@Element的元素(個人感覺都加上吧,防止xml數據變化)
inline = true:ElementList的一個屬性,由于ElementList包了一層,如果為false將不能解析。
步驟三:
寫一個WeatherService接口,Retrofit2需要用到
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
/**
* Created by 奈蜇 on 2018-07-25.
* WeatherService
*/
public interface WeatherService {
@GET("open/api/weather/xml.shtml")
Call getRespWeather(@Query("city") String city);
}
請求:
private void get(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.sojson.com")
.addConverterFactory(SimpleXmlConverterFactory.create())
.build();
WeatherService service = retrofit.create(WeatherService.class);
service.getRespWeather("北京").enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if(response.isSuccessful()){
RespWeather respWeather = response.body();
Log.d(TAG,respWeather.toString());
}else {
Log.d(TAG, "請求失敗!");
}
}
@Override
public void onFailure(Call call, Throwable t) {
Log.d(TAG, "請求失敗!");
}
});
}
好了,Debug看下結果如何
結果
我們可以看到除了xml中沒有的元素是null,其他都解析成功
總結
以上是生活随笔為你收集整理的android xml 解析天气,Retrofit2解析天气API XML接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android xe 调用 java,D
- 下一篇: asp.net ajax控件工具集 Au