Android 用Pull解析XML方法解析穀歌天氣
解析類:
package com.lzx.weather; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import android.util.Log; public class WeatherModel { public static WeatherCurrentCondition curCondition = null; public static List<WeatherForecastCondition> forecastList = null; URL mUrl; public WeatherModel(URL url){ this.mUrl = url; initData(mUrl); } public void initData(URL url){ try { InputStream is = null; HttpURLConnection conn = (HttpURLConnection) url.openConnection(); is = conn.getInputStream(); if(is != null){ XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); // XmlPullParser parser = Xml.newPullParser();用這個解析不出來,值得注意 parser.setInput(is, "GBK"); WeatherForecastCondition forecastCondition = null; int eventType = parser.getEventType(); Log.d("lzx", "eventType=" + eventType); while(eventType != XmlPullParser.END_DOCUMENT){ switch (eventType) { case XmlPullParser.START_DOCUMENT: Log.d("lzx", "START_DOCUMENT=" + parser.getName()); forecastList = new ArrayList<WeatherForecastCondition>(); break; case XmlPullParser.START_TAG: String name = parser.getName(); // if("weather".equals(name)){ // Log.d("lzx", "START_TAG=" + name); // } if("forecast_conditions".equals(name)){ Log.d("lzx", "START_TAG=" + name); forecastCondition = new WeatherForecastCondition(); }else if(forecastCondition != null){ if("day_of_week".equals(name)){ forecastCondition.day_of_week = parser.getAttributeValue(0); } if("low".equals(name)){ forecastCondition.low = parser.getAttributeValue(0); } if("high".equals(name)){ forecastCondition.high = parser.getAttributeValue(0); } if("icon".equals(name)){ forecastCondition.icon = parser.getAttributeValue(0); } if("condition".equals(name)){ forecastCondition.condition = parser.getAttributeValue(0); } } if("current_conditions".equals(name)){ Log.d("lzx", "START_TAG=" + name); curCondition = new WeatherCurrentCondition(); }else if(curCondition != null){ if("condition".equals(name)){ Log.d("lzx", "condition=" + parser.getAttributeValue(0)); curCondition.condition = parser.getAttributeValue(0); } if("temp_f".equals(name)){ curCondition.temp_fahrenheit = parser.getAttributeValue(0); } if("temp_c".equals(name)){ curCondition.temp_celcius = parser.getAttributeValue(0); } if("humidity".equals(name)){ curCondition.humidity = parser.getAttributeValue(0); } if("icon".equals(name)){ curCondition.icon = parser.getAttributeValue(0); } if("wind_condition".equals(name)){ curCondition.wind_condition = parser.getAttributeValue(0); } } break; case XmlPullParser.END_TAG: if("forecast_conditions".equals(parser.getName())){ Log.d("lzx", "END_TAG=" + parser.getName()); if(forecastList != null && forecastCondition != null){ forecastList.add(forecastCondition); Log.d("lzx", "forecastList size=" + forecastList.size()); } forecastCondition = null; } break; } eventType = parser.next(); } Log.d("lzx", "curCondition--" + curCondition); } } catch (Exception e) { e.printStackTrace(); } } }
WeatherCurrentCondition.java
package com.lzx.weather; public class WeatherCurrentCondition { public String condition; // 多雲 public String temp_celcius; // 攝氏溫度 public String temp_fahrenheit; // 華氏溫度 public String humidity; // 濕度:58% public String wind_condition; // 風向... public String icon; // 圖標 //得到一個封裝打包的字符串,包括除icno外的所有東西 public String toString() { StringBuilder sb = new StringBuilder(); sb.append("實時天氣: ").append(temp_celcius).append(" °C"); sb.append(" ").append(temp_fahrenheit).append(" F"); sb.append(" ").append(condition); sb.append(" ").append(humidity); sb.append(" ").append(wind_condition); return sb.toString(); } }
WeatherForecastCondition.java
package com.lzx.weather; public class WeatherForecastCondition { public String day_of_week; //星期 public String low; //最低溫度 public String high; //最高溫度 public String icon; //圖標 public String condition; //提示 public String toString() { StringBuilder sb = new StringBuilder(); sb.append(" ").append(day_of_week); sb.append(" : ").append(high); sb.append("/").append(low).append(" °C"); sb.append(" ").append(condition); return sb.toString(); } }
最後更新:2017-04-02 22:16:00