使用Pull解析xml,将数据用listView显示

xml解析在企业中用到的并不多,但是我们不妨可以来认识一下
1、布局,只有一个ListView

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2、MainActivity,这里我也是为了省事就把适配器写在本界面了,看着非常不明了,不建议向我学习

package com.wjh.activity;

public class MainActivity extends Activity {

private XmlPullParser parser;
private List<Student> list;
private Student student;

@SuppressWarnings("resource")
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	// 初始化数据
	initDatas();
	// 找控件
	ListView listView = (ListView) findViewById(R.id.listView);
	// 设置适配器
	listView.setAdapter(new MyAdapter());
}

// 适配器
class MyAdapter extends BaseAdapter {

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder;
		// 判断
		if (convertView == null) {
			// 加载视图
			convertView = View.inflate(MainActivity.this, R.layout.l_item,
					null);
			// 创建ViewHolder
			holder = new ViewHolder();
			// 找控件
			holder.name = (TextView) convertView.findViewById(R.id.name_l);
			holder.sex = (TextView) convertView.findViewById(R.id.sex_l);
			// 设置标签
			convertView.setTag(holder);
		} else {
			// 获取标签
			holder = (ViewHolder) convertView.getTag();
		}
		// 设置内容
		Student student2 = list.get(position);
		holder.name.setText(student2.getName());
		holder.sex.setText(student2.getSex());
		return convertView;
	}

	// 创建内部类
	class ViewHolder {
		TextView name, sex;
	}

}

private void initDatas() {
	try {
		// 获取assets下的文件
		InputStream inputStream = getAssets().open("wjh.xml");

		// 获取sd卡中的文件
		/*
		 * File file = new
		 * File(Environment.getExternalStorageDirectory(),"xxx.xml");
		 * FileInputStream inputStream = new FileInputStream(file);
		 */

		// 获取Pull工厂
		try {
			XmlPullParserFactory factory = XmlPullParserFactory
					.newInstance();
			// 获取解析器
			parser = factory.newPullParser();
			// 向解析器设置输入流和编码格式
			parser.setInput(inputStream, "UTF-8");
			// 获取事件类型
			int eventType = parser.getEventType();

			// 循环的条件eventType不等于结束文档
			while (eventType != parser.END_DOCUMENT) {
				// 获取节点name
				String parserName = parser.getName();
				switch (eventType) {
				// 开始文档
				case XmlPullParser.START_DOCUMENT:
					// 创建存储集合
					list = new ArrayList<Student>();
					break;
				// 开始节点
				case XmlPullParser.START_TAG:
					// 自己创建一个判断节点的方法
					parserStartTag(parser, parserName);
					break;
				// 结束节点
				case XmlPullParser.END_TAG:
					// 判断是否是最后一个节点
					if (parserName.equals("student")) {
						list.add(student);
					}
					break;
				}
				// 继续下次循环
				eventType = parser.next();
			}
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
}

// 创建的判断节点的方法
private void parserStartTag(XmlPullParser parser, String parserName) {

	if (parserName.equals("student")) {
		// 声明并实例化对象
		student = new Student();
		// 节点的第一个子节点
		student.setId(parser.getAttributeValue(0));
	} else if (parserName.equals("name")) {
		try {
			student.setName(parser.nextText());
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	} else if (parserName.equals("sex")) {
		try {
			student.setSex(parser.nextText());
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值