Android客户端对服务端回来的xml文件内容进行解析

Android客户端对服务端返回的xml文件内容进行解析

一、首先得到服务器端的xml文件

String path = "http://10.0.2.2:9999/XMLServer/video.xml";
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(8 * 1000);
conn.setRequestMethod("GET");
InputStream is = conn.getInputStream();
byte[] data = StreamTools.readInput(is);

   StreamTools代码:

public class StreamTools {

	public static byte[] readInput(InputStream is) throws Exception {
		byte[] buffer = new byte[is.available()];
		int len = 0;
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		while((len = is.read(buffer)) != -1) {
			bos.write(buffer,0,len);
		}
		bos.close();
		return bos.toByteArray();
	}
}

 

二、将得到的xml文件进行解析

/**
	 * 解析服务器返回来的xml数据
	 * @param content
	 * @return
	 * @throws Exception
	 */
	private static List<Video> parseXML(String content) throws Exception {
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser parser = factory.newSAXParser();
		XMLReader reader = parser.getXMLReader();
		List<Video> videoList = new ArrayList<Video>();
		reader.setContentHandler(new MyContentHandler(videoList));
		reader.parse(new InputSource(new StringReader(content)));
		return videoList;
	}

 MyContentHandler代码:

public class MyContentHandler extends DefaultHandler {

	private List<Video> videoList;
	private Video video;
	private String tagName;
	
	public MyContentHandler() {
		
	}
	
	public MyContentHandler(List<Video> videoList) {
		this.videoList = videoList;
	}
	
	@Override
	public void startDocument() throws SAXException {
		
	}

	@Override
	public void endDocument() throws SAXException {
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if("video".equals(localName)) {
			video = new Video();
		}
		tagName = localName;
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if("video".equals(localName)) {
			videoList.add(video);
		}
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if("name".equals(tagName)) {
			String name = new String(ch,start,length).trim();
			if(StringTools.isNotEmpty(name)) {
				video.setName(name);
			}
		} else if("time".equals(tagName)) {
			String time = new String(ch,start,length).trim();
			if(StringTools.isNotEmpty(time)) {
				video.setTime(time);
			}
		}
	}

}

 三、最终得到解析出来的VO的List列表,在activity中用ListView显示出来

ListViewActivity代码:

public class ListViewActivity extends Activity {

	private ListView list;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listtext);
		list = (ListView)this.findViewById(R.id.list);
		try {
			List<Video> videolist = GetVideoService.getVideoList();
			System.out.println("--------------"+videolist);
			List<Map<String,String>> listItems = new ArrayList<Map<String,String>>();
			for(Video video : videolist) {
				Map<String,String> listItem = new HashMap<String, String>();
				listItem.put("name", video.getName());
				listItem.put("time", video.getTime());
				listItems.add(listItem);
			}
			
			SimpleAdapter adapter = new SimpleAdapter(Ku6Activity.this, listItems, R.layout.ku6, 
					new String[]{"name","time"}, new int[]{R.id.name,R.id.time});
			list.setAdapter(adapter);
		} catch (Exception e) {
			Toast.makeText(Ku6Activity.this, "网络连接失败", Toast.LENGTH_SHORT).show();
			e.printStackTrace();
		}
	}
	
}

  

1 楼 zhjpmomo 2012-04-26  
楼主能不能发个源码项目啊,有点乱啊。