网络发达的今天,软件市场上99%的app都是需要联网的(最起码你要升级吧,提示,版本号啥的……),那么通讯数据一般由json和xml格式,还有部分可能是数据序列化(最省资源的一种)。
在android里面,解析xml个人比较倾向于DefaultHandler,也是android内置到开发包里面的。说到这里,可以说不少开发者都不知道DefaultHandler正确的用法,而且官方的Demo也是有问题的。在characters函数中,根据public void characters(char[] ch, int start, int length)提供的直接new一直字符串,然后设置到对象中去,大多时候可能是没有问题的。但是有些时候,可能数据格式,长度、空格之类,你会发现,你获取的数据并不完整。那么下面是可以完整获取到数据的实现,我把代码贴出来!
import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public abstract class BaseHandler extends DefaultHandler { protected StringBuffer buffer; public BaseHandler() { super(); // TODO Auto-generated constructor stub buffer = new StringBuffer(); } public String getText() { return buffer.toString(); } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); buffer.setLength(0); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); xml(uri, localName, qName); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); buffer.append(ch, start, length); } public abstract void xml(String uri, String localName, String qName); }
使用的话很简单,继续这个类,会自动重写xml方法,然后通过qName比较对应的tag,通过getText()获取对应tag的内容。
import java.util.ArrayList; import java.util.List; import com.audividi.april.item.MeetItem; public class MeetListHandler extends BaseHandler { private Listlist; public MeetListHandler() { // TODO Auto-generated constructor stub list = new ArrayList(); } public ListgetList() { return list; } @Override public void xml(String uri, String localName, String qName) { // TODO Auto-generated method stub if (qName.equals("ID")) { MeetItem cast = new MeetItem(); cast.setId(getText()); list.add(cast); } else if (qName.equals("CONF_SUBJECT")) { getLast().setConf_subject(getText()); } else if (qName.equals("CONF_CONTENT")) { getLast().setConf_content(getText()); } else if (qName.equals("START_TIME")) { getLast().setStart_time(getText()); } else if (qName.equals("END_TIME")) { getLast().setEnd_time(getText()); } else if (qName.equals("MAX_SPEAKER")) { getLast().setMax_speaker(Integer.parseInt(getText())); } else if (qName.equals("MAX_USER")) { getLast().setMax_user(Integer.parseInt(getText())); } else if (qName.equals("CONF_AV")) { getLast().setConf_av(Integer.parseInt(getText())); } else if (qName.equals("CONF_DISPLAY")) { getLast().setConf_display(getText()); } else if (qName.equals("SIP_NAME")) { getLast().setSip_name(getText()); } else if (qName.equals("ANONYMOUS_ALLOWED")) { getLast().setAnonymous_al(Byte.parseByte(getText()) == 1); } else if (qName.equals("LAST_UPDATE")) { getLast().setLast_update(getText()); } else if (qName.equals("CONF_AVATAR")) { getLast().setConf_avatar(getText()); } else if (qName.equals("CONF_AVATAR_L")) { getLast().setConf_avatar_l(getText()); } else if (qName.equals("CONF_AVATAR_M")) { getLast().setConf_avatar_m(getText()); } else if (qName.equals("CONF_AVATAR_S")) { getLast().setConf_avatar_s(getText()); } else if (qName.equals("CONF_SORT")) { getLast().setConf_sort(Integer.parseInt(getText())); } else if (qName.equals("CONF_VIEW")) { getLast().setConf_view(Integer.parseInt(getText())); } else if (qName.equals("CONF_USERNUMER")) { getLast().setConf_usernumber(Integer.parseInt(getText())); } else if (qName.equals("CONF_STATUS")) { getLast().setConf_status(Integer.parseInt(getText())); } } private MeetItem getLast() { return list.get(list.size() - 1); } }
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2302
- 用户1336
- 访客10974131
每日一句
Qingming Festival invites us to honor ancestors with quiet reflection and respect.
清明节邀请我们以静思与敬意祭奠祖先。
清明节邀请我们以静思与敬意祭奠祖先。
UAC的限制引起WM_DROPFILES无法响应的解决办法
MeasureSpec中三种模式:UNSPECIFIED,AT_MOST,EXACTLY
发几个实用的chrome插件
CentOS下使用 svnsync迁移SVN代码库
仙剑奇侠传3d回合-PC端辅助
【转载】C++实现EXE加载到内存执行
【收藏】OpenCV一些常用库函数
《闲来麻将》搭建教程
文本转语音系统Spark-TTS
wordpress转xiuno附件自动插入工具
Mac OS最简单及(Karabiner)快捷键设置
使用Putty上传文件?
ndk神奇问题之non-numeric second argument to `wordlist' function: '8.7z'
新会员