android 使用pull 模式解析 xml文件
android 使用pull 方式解析 xml文件
2、创建一个相应的java bean 文件
1、创建一个.xml 文件,用来描述事物的信息:computer.xml
<?xml version="1.0" encoding="UTF-8"?> <infos> <computer id="1"> <name>华硕</name> <price>3500</price> </computer> <computer id="2"> <name>联想</name> <price>3900</price> </computer> </infos>
2、创建一个相应的java bean 文件
package com.example.bean; public class Computer { private int id; private String name; private float price; 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 float getPrice() { return price; } public void setPrice(float price) { this.price = price; } @Override public String toString() { return this.id + ":" + this.name + ":" + this.price; } }3、定义一个工具类用来解析.xml 文件
package com.example.util; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; import com.example.bean.Computer; public class MyXmlPull { public static List<Computer> getComputersInfo(InputStream inputStream) throws Exception { List<Computer> list = null; Computer computer = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(inputStream, "UTF-8"); // 设置输入流 int event = parser.getEventType();// 取得操作事件 while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT:// 开始文档 list = new ArrayList<Computer>();// 初始化list集合 break; case XmlPullParser.START_TAG:// 开始标签 if ("computer".equals(parser.getName())) {// 判断开始标签元素是否是computer computer = new Computer(); computer.setId(Integer.parseInt(parser.getAttributeValue(0)));// 得到computer标签的属性值,并设置computer的id } if (computer != null) { if ("name".equals(parser.getName())) {// 判断开始标签元素是否是name computer.setName(parser.nextText()); } else if ("price".equals(parser.getName())) {// 判断开始标签元素是否是price computer.setPrice(Float.parseFloat(parser.nextText())); } } break; case XmlPullParser.END_TAG:// 判断当前事件是否是标签元素结束事件 if ("computer".equals(parser.getName())) {// 判断结束标签元素是否是computer list.add(computer);// 将computer添加到list集合 computer = null; } break; } event = parser.next();// 进入下一个元素并触发相应事件 } return list; } }4、在程序中调用:
package com.example.layout; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import com.example.bean.Computer; import com.example.util.MyXmlPull; public class MainActivity extends Activity { private LinearLayout line1 = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); line1 = (LinearLayout) this.findViewById(R.id.line1); Button btn = new Button(this); btn.setText("点击"); line1.addView(btn, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { List<Computer> list = MyXmlPull.getComputersInfo(getClass().getClassLoader().getResourceAsStream("computer.xml")); for (Computer c : list) { Log.i("mark", c.toString()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } }
note:本程序中的computer.xml 是放置在src 的根目录下