xml解析
来源:互联网 发布:领航网络电商有限公司 编辑:程序博客网 时间:2024/06/10 03:50
xml解析业务方法
javabean
public class News { private String title; private String description; private String image; private String type; private String comment; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; }}
XmlParserUtils.java
public class XmlParserUtils { public static List<News> parserXml(InputStream in) throws Exception { List<News> newsLists = null; News news = null; // 1.获取xml解析器 XmlPullParser parser = Xml.newPullParser(); //2. 获取解析器要解析的内容 parser.setInput(in, "utf-8"); //3. 获取解析的事件类型 int type = parser.getEventType(); //4. 不停的向下解析 while (type != XmlPullParser.END_DOCUMENT) { //5.具体判断解析的是开始节点,还是结束节点 switch (type) { //解析开始节点 case XmlPullParser.START_TAG: //6.具体判断解析哪一个开始标签 if ("channel".equals(parser.getName())) { //创建一个list集合 newsLists = new ArrayList<News>(); } else if ("item".equals(parser.getName())) { //对象 news = new News(); } else if ("title".equals(parser.getName())) { news.setTitle(parser.nextText()); } else if ("description".equals(parser.getName())) { news.setDescription(parser.nextText()); }else if ("image".equals(parser.getName())) { news.setIamge(parser.nextText()); }else if ("type".equals(parser.getName())) { news.setType(parser.nextText()); }else if ("comment".equals(parser.getName())) { news.setComment(parser.nextText()); } break; case XmlPullParser.END_TAG://解析结束标签 if ("item".equals(parser.getName())) { // 把javabean添加到集合 newsLists.add(news); } break; } // 不停向下解析 type = parser.next(); } return newsLists; }}
MainActivity
public class MainActivity extends Activity { private List<News> newsLists; ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 找到控件 lv = (ListView) findViewById(R.id.lv); // 准备listview要显示的数据,去服务器获取数据进行封装 initListData(); } // 准备listview的数据 private void initListData() { // 不管什么版本手机只要做耗时的操作(比如连接网络/拷贝大数据.....)就要开一个子线程. new Thread() { public void run() { try { // 去服务器取数据:url地址 String path = "http://www.caijing.com.cn/rss/index.xml"; // 创建url对象,指定我们要方访问的网址 URL url = new URL(path); // 拿到httpurlconnection对象,用于发送或者接收数据 HttpURLConnection connection = (HttpURLConnection) url .openConnection(); // 设置发送get请求 connection.setRequestMethod("GET"); // 设置请求超时时间 connection.setConnectTimeout(5000); // 获取服务器返回 的状态码 int code = connection.getResponseCode(); // 200 说明请求成功 if (code == 200) { // 获取服务器返回的数据,是以流的形式返回的,由于把流转换成字符串是非常常见的操作,所以提出一个工具类 InputStream in = connection.getInputStream(); // 解析xml抽出一个业务方法 newsLists = XmlParserUtils.parserXml(in); // 在子线程中要用runOnUiThread方法 runOnUiThread(new Runnable() { public void run() { // 更新UI把数据展示到listview上 lv.setAdapter(new MyAdapter()); } }); } } catch (Exception e) { e.printStackTrace(); } }; }.start(); } // 定义数据适配器 private class MyAdapter extends BaseAdapter { @Override public int getCount() { return newsLists.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if (convertView == null) { view = View.inflate(getApplicationContext(), R.layout.item, null); } else { view = convertView; } // 1. 找到控件显示集合里面数据 SmartImageView iv_icon = (SmartImageView) view .findViewById(R.id.iv_icon); TextView tv_title = (TextView) view.findViewById(R.id.tv_title); TextView tv_desc = (TextView) view.findViewById(R.id.tv_desc); TextView tv_type = (TextView) view.findViewById(R.id.tv_type);// 1.1显示图片数据:用Github开源项目的SmartImageView加载图片代码更简单.在布局文件中用(SmartImageView的路径名)<com.jit.lib.SmartImageView/>代替<ImageView/> String imageUrl = newsLists.get(position).getImage(); iv_icon.setImageUrl(imageUrl);// 2.显示数据 tv_title.setText(newsLists.get(position).getTitle()); tv_desc.setText(newsLists.get(position).getDescription()); String typee = newsLists.get(position).getType(); String comment = newsLists.get(position).getComment(); int type = Integer.parseInt(typee); switch (type) { case 1: tv_type.setText(comment + "国内新闻"); break; case 2: tv_type.setText("跟帖"); break; case 3: tv_type.setText("国外新闻"); break; default: break; } return view; } }}
0 0
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- 4.mybatis,mapper代理开发
- 《招聘一个靠谱的 iOS》—参考答案
- D - Beauty of Array——ZOJ
- Annotation实战【自定义AbstractProcessor】
- 实现RTP协议的H.264视频传输系统
- xml解析
- Asp.net marquee与js实现滚动效果
- poj 1014 -- 01背包 完全背包 多重背包 代码详解
- FragmentPagerAdapter中的getItem()方法 第二次进入该fragment,不会被调用的问题
- MTK 开机黑屏很长时间
- 四种方案解决ScrollView嵌套ListView问题
- 依赖注入那些事儿
- oracle 执行包含update语句的存储过程并获取结果记录
- 文章标题