Android(安卓)采用pull解析xml文件
16lz
2021-01-24
XML文件:
<?xml version="1.0" encoding="utf-8"?><infos><city id="1"><name>上海</name><temperature>15℃~20℃</temperature><weather>多云转晴</weather><wind>偏东风3~5级</wind></city><city id="1"><name>北京</name><temperature>18℃~22℃</temperature><weather>阵雨转多云</weather><wind>偏东风4~8级</wind></city><city id="1"><name>哈尔滨</name><temperature>5℃~10℃</temperature><weather>晴</weather><wind>偏东风1~2级</wind></city></infos>
Java代码:
package cn.jinyejun.android_domain;/** * 天气对象,用来保存天气所有属性 * * @author jinyejun * @date 2014-10-31 17:00 */public class WeatherInfo {private int id;private String name;private String temperature;private String weather;private String wind;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getTemperature() {return temperature;}public void setTemperature(String temperature) {this.temperature = temperature;}public String getWeather() {return weather;}public void setWeather(String weather) {this.weather = weather;}public String getWind() {return wind;}public void setWind(String wind) {this.wind = wind;}@Overridepublic String toString() {String str = String.format("%s\n温度:%s\n天气:%s\n风速:%s", name,temperature, weather, wind);System.out.println();return str;}}
package cn.jinyejun.android_service;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.content.Context;import android.util.Xml;import android.widget.Toast;import cn.jinyejun.android_domain.WeatherInfo;/** * 天气业务类 用来解析xml文件获取天气信息 * * @author jinyejun date : 2014-10-31 17:00 */public class WeatherService {/** * 用Pull方式解析xml文件 * * @param context * 上下文 * @param is * xml文件流 * @return weatherInfo 获取的天气集合 */public final static List<WeatherInfo> getWeatherInfo(Context context,InputStream is) {//创建xml文件解析器XmlPullParser parser = Xml.newPullParser();try {//指定xml文件输入流以及编码方式parser.setInput(is, "utf-8");//创建天气对象用来存放天气各个属性WeatherInfo info = null;//创建天气集合,用来保存解析到的每个天气对象List<WeatherInfo> weatherInfo = null;//获取解析器解析到的事件类型int type = parser.getEventType();//当事件类型不是文档结束标志的时候继续执行while (type != XmlPullParser.END_DOCUMENT) {switch (type) {//如果遇到开始标签,那么根据标签获取实际内容并且给天气对象对应属性赋值case XmlPullParser.START_TAG:if ("infos".equals(parser.getName())) {weatherInfo = new ArrayList<WeatherInfo>();} else if ("city".equals(parser.getName())) {info = new WeatherInfo();String idStr = parser.getAttributeValue(null, "id");info.setId(Integer.parseInt(idStr));} else if ("name".equals(parser.getName())) {String name = parser.nextText();info.setName(name);} else if ("temperature".equals(parser.getName())) {String temperature = parser.nextText();info.setTemperature(temperature);} else if ("weather".equals(parser.getName())) {String weather = parser.nextText();info.setWeather(weather);} else if ("wind".equals(parser.getName())) {String wind = parser.nextText();info.setWind(wind);}break;//如果遇到结束标签说明已经解析完xml中一个节点case XmlPullParser.END_TAG:if ("city".equals(parser.getName())) {//将获取到的天气对象放在天气集合中weatherInfo.add(info);//释放info内存info = null;}break;}//很重要!!必须移到下一个,不然就是死循环type = parser.next();}return weatherInfo;} catch (Exception e) {e.printStackTrace();Toast.makeText(context, "读取文件失败", Toast.LENGTH_SHORT);return null;}}}
package cn.jinyejun.android_weatherreport;import java.io.InputStream;import java.util.List;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.widget.TextView;import cn.jinyejun.android_domain.WeatherInfo;import cn.jinyejun.android_service.WeatherService;public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv = (TextView) findViewById(R.id.tv_content);//用类加载器获取对应目录下的xml文件,放回文件输入流InputStream is = MainActivity.class.getClassLoader().getResourceAsStream("weather.xml");//获取天气集合List<WeatherInfo> infos = WeatherService.getWeatherInfo(this, is);StringBuffer sb = new StringBuffer();for(WeatherInfo info: infos){sb.append(info.toString());sb.append("\n\n");}tv.setText(sb.toString());}}
更多相关文章
- 出现add 'tools:replace="android:value"' to element at Androi
- [Android] ICS | JB 锁屏农历的添加
- Android(安卓)Gradle
- Android(安卓)studio 打包aar
- 签名keystore一系列
- tiny210 android 移植过程中的几个问题
- android ListView增加Animation效果
- Android将String保存为SD卡中TXT文件的方法
- Ubuntu 14.04 下 android studio 安装 和 配置