//这个是SAX解析的所有
public class XMLContentHandler extends DefaultHandler {
private boolean IsDisplayNameTag =false;
private boolean IsAvatarTag =false;
private boolean IsReputationTotalTag =false;
private boolean IsUserTag =false;
private String DisplayName="DisplayName";
private String Avatar="Avatar";
private String ReputationTotal="ReputationTotal";
private Users users ;
private List<Users> list;
public List<Users> getUsers() {
return list;
}
//打开xml文档的回调函数
@Override
public void startDocument() throws SAXException{
//这里做list的初始化工作
Log.e("+++++++++>1","1");
list =new ArrayList<Users>();
}
//一旦发现元素开始标记就回调此函数
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (localName.equals("User")) {
users =new Users();
IsUserTag =true;
}
if (localName.equals(DisplayName)) {
IsDisplayNameTag=true;
}else if (localName.equals(Avatar)) {
IsAvatarTag =true;
}else if (localName.equals(ReputationTotal)) {
IsReputationTotalTag =true;
}
}
//一发现元素值或属性值就回调此函数
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String data =new String(ch,start,length);
if (IsDisplayNameTag) {
users.setDisplayName(data);
}else if (IsAvatarTag) {
users.setAvatar(data);
}else if (IsReputationTotalTag) {
users.setReputationTotal(data);
// Log.i("uuuuuuuuuuuu3",data);
}else {
}
}
//一旦发现元素结束标记就回调此函数
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (localName.equals("User")) {
IsUserTag=false;
list.add(users);
}
if (localName.equals(DisplayName)) {
IsDisplayNameTag =false;
}else if (localName.equals(Avatar)) {
IsAvatarTag =false;
}else if (localName.equals(ReputationTotal)) {
IsReputationTotalTag =false;
}
}
//关闭xml文档的回调函数
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
Log.e("+++++++++>5","5");
super.endDocument();
}
}
// 解析的标签
* User DisplayName Avatar ReputationTotal需要解析的标签
* */
public class Users {
private String User;
private String DisplayName;
private String Avatar;
private String ReputationTotal;
public String getUser() {
return User;
}
public void setUser(String user) {
User = user;
}
public String getDisplayName() {
return DisplayName;
}
public void setDisplayName(String displayName) {
DisplayName = displayName;
}
public String getAvatar() {
return Avatar;
}
public void setAvatar(String avatar) {
Avatar = avatar;
}
public String getReputationTotal() {
return ReputationTotal;
}
public void setReputationTotal(String reputationTotal) {
ReputationTotal = reputationTotal;
}
}
/**自定义的MyAdapter 继承BaseAdapter
*最下面是一个ASYNCTACK的异步刷新
*
*/
public class MyAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<Users> items;
public MyAdapter(Context context,List<Users> it){
inflater =LayoutInflater.from(context);
items =it;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout layout =(LinearLayout) inflater.inflate(R.layout.listone, null);
Users user =items.get(position);
TextView txtname =(TextView) layout.findViewById(R.id.txtup);
txtname.setTextColor(Color.BLACK);
txtname.setTextSize(20);
txtname.setText(user.getDisplayName());
TextView txtrep = (TextView) layout.findViewById(R.id.txtdown);
txtname.setTextColor(Color.BLACK);
txtrep.setTextSize(10);
txtrep.setText(user.getReputationTotal());
ImageView img =(ImageView) layout.findViewById(R.id.img01);
String image =user.getAvatar();
img.setTag(image);
new AsyncLoader().execute(img);
img.setDrawingCacheEnabled(true);
return layout;
}
//继承于AsyncTask 刷新ImageView,未实现图片下载到SD卡的功能;
class AsyncLoader extends AsyncTask <ImageView, Void, Bitmap>{
private ImageView gView;
protected Bitmap doInBackground(ImageView... views) {
Bitmap bmp = null;
ImageView view = views[0];
// 根据iconUrl获取图片并渲染,iconUrl的url放在了view的tag中。
if (view.getTag() != null) {
try {
URL url = new URL(view.getTag().toString());
GetImage image =new GetImage();
bmp =image.getImage(url);
} catch (Exception e) {
Log.v("img", e.getMessage());
return null;
}
}
this.gView = view;
return bmp;
}
protected void onPostExecute(Bitmap bm) {
if (bm != null) {
this.gView.setImageBitmap(bm);
this.gView = null;
}
}
}
}
分享到:
相关推荐
DOM(Document Object Model)解析和SAX(Simple API for XML)解析是两种常见的XML文档解析方式,它们在处理XML数据时有不同的策略和优缺点。 DOM解析是一种基于树型结构的XML解析方法。当一个XML文档被DOM解析器...
2. **设置事件处理器**:通过`SAXParser`的`setHandler`方法设置一个实现了`ContentHandler`接口的对象,这个对象将处理SAX解析过程中触发的事件。 3. **解析XML**:调用`parse`方法,传入XML文件的输入流或URL,...
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...
在本项目中,"saxloadxml"应该是实现了一个SAX解析XML文件的示例,旨在帮助开发者理解和应用SAX解析。 首先,我们需要理解SAX解析的基本原理。当解析器读取XML文件时,它会触发一系列的事件,如开始文档、结束文档...
SAX解析的基本原理是:当解析器读取XML文档时,遇到每个元素、属性或其他XML结构,都会触发一个事件,并调用相应的回调方法。开发者需要定义一个实现了SAX解析器接口的类,重写这些回调方法,以便在解析过程中进行...
DOM(文档对象模型)解析XML文档是通过构建一个树形结构,将整个XML文档加载到内存中,形成一个节点层次。W3C官方推荐了DOM,使其成为与平台和语言无关的XML文档表示方式。DOM方法可以修改XML文档,例如增加、删除和...
本文将深入探讨XML解析中的SAX(Simple API for XML)解析方法,并结合一个具体的Android 4.0网络编程示例进行详细讲解。 SAX解析是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取...
SAX(Simple API for XML)是XML解析的一种方式,它以事件驱动的方式处理XML文档,适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存中。 在SAX解析中,XML文档被读取一次,遇到特定的元素、属性或其他...
这个"Project1231_001_XML_SAX"可能包含了一个简单的XML文件和对应的SAX解析示例代码,通过运行这个项目,开发者可以了解如何在实际应用中使用SAX解析XML数据,以及如何处理XML文档中的不同结构。学习和理解SAX解析...
XML(eXtensible Markup ...如果你的应用场景更注重于快速、低内存消耗地读取XML,那么SAX解析是一个很好的选择。但在需要对XML文档进行结构化操作或需要随机访问的情况下,可能需要考虑使用DOM或其他解析方式。
- `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...
1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`SAXParser`对象。 ```java SAXParserFactory ...
Java SAX(Simple API for XML)解析器是一种基于事件驱动的XML解析方式,它不将整个XML文档加载到内存中,而是逐行读取,当遇到某个事件(如开始标签、结束标签等)时,会触发相应的事件处理器方法。这种方式节省了...
SAX解析是一种流式的XML解析方式,它使用了一种基于事件的模型来处理XML文档。开发者不需要在内存中构建整个文档的树形结构,而是通过响应XML解析器发出的事件来处理XML文档。这种方式特别适合处理大型的XML文件,...
在提供的“analysis_xml”项目中,很可能包含了一个示例,演示了如何使用dom4j的SAX解析器解析XML文件。这样的测试项目有助于理解SAX解析的工作原理,并在实际开发中应用。 总结起来,dom4j库提供了DOM和SAX两种XML...
1. **设置SAX解析器**:首先,我们需要创建一个`SAXParserFactory`实例,然后使用`newSAXParser()`方法获取`SAXParser`。这一步用于配置和初始化SAX解析器。 2. **创建自定义的SAX Handler**:创建一个扩展了`...
以下是一个简单的SAX解析超大XML文件的Java示例代码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers....
4. **创建SAX解析器**:使用`SAXParserFactory`的`newInstance()`方法创建一个解析器工厂,然后调用`newSAXParser()`方法生成SAX解析器实例。 5. **实现ContentHandler**:创建一个实现了`org.xml.sax....