`
wkj52719
  • 浏览: 10299 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

最近写的一个解析网页的应用,用到了图片下载,SAX解析,AsyncTack,Thread,请大虾们指教

阅读更多

//这个是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解析和sax解析

    DOM(Document Object Model)解析和SAX(Simple API for XML)解析是两种常见的XML文档解析方式,它们在处理XML数据时有不同的策略和优缺点。 DOM解析是一种基于树型结构的XML解析方法。当一个XML文档被DOM解析器...

    Sax解析XML文件解析

    2. **设置事件处理器**:通过`SAXParser`的`setHandler`方法设置一个实现了`ContentHandler`接口的对象,这个对象将处理SAX解析过程中触发的事件。 3. **解析XML**:调用`parse`方法,传入XML文件的输入流或URL,...

    SAX解析XML文件实例

    一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例

    java解析xml数据---sax解析器

    Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...

    sax解析xml文件

    在本项目中,"saxloadxml"应该是实现了一个SAX解析XML文件的示例,旨在帮助开发者理解和应用SAX解析。 首先,我们需要理解SAX解析的基本原理。当解析器读取XML文件时,它会触发一系列的事件,如开始文档、结束文档...

    SAX解析 安卓应用

    SAX解析的基本原理是:当解析器读取XML文档时,遇到每个元素、属性或其他XML结构,都会触发一个事件,并调用相应的回调方法。开发者需要定义一个实现了SAX解析器接口的类,重写这些回调方法,以便在解析过程中进行...

    使用DOM解析XML和使用SAX解析XML

    DOM(文档对象模型)解析XML文档是通过构建一个树形结构,将整个XML文档加载到内存中,形成一个节点层次。W3C官方推荐了DOM,使其成为与平台和语言无关的XML文档表示方式。DOM方法可以修改XML文档,例如增加、删除和...

    XML解析之SAX解析DEMO

    本文将深入探讨XML解析中的SAX(Simple API for XML)解析方法,并结合一个具体的Android 4.0网络编程示例进行详细讲解。 SAX解析是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取...

    xml文件解析SAX

    SAX(Simple API for XML)是XML解析的一种方式,它以事件驱动的方式处理XML文档,适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存中。 在SAX解析中,XML文档被读取一次,遇到特定的元素、属性或其他...

    一个关于sax解析xml的demo

    这个"Project1231_001_XML_SAX"可能包含了一个简单的XML文件和对应的SAX解析示例代码,通过运行这个项目,开发者可以了解如何在实际应用中使用SAX解析XML数据,以及如何处理XML文档中的不同结构。学习和理解SAX解析...

    SAX对xml文档进行解析

    XML(eXtensible Markup ...如果你的应用场景更注重于快速、低内存消耗地读取XML,那么SAX解析是一个很好的选择。但在需要对XML文档进行结构化操作或需要随机访问的情况下,可能需要考虑使用DOM或其他解析方式。

    android使用SAX解析xml

    - `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...

    Sax解析xml文件

    1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`SAXParser`对象。 ```java SAXParserFactory ...

    Java SAX解析Xml文档Demo

    Java SAX(Simple API for XML)解析器是一种基于事件驱动的XML解析方式,它不将整个XML文档加载到内存中,而是逐行读取,当遇到某个事件(如开始标签、结束标签等)时,会触发相应的事件处理器方法。这种方式节省了...

    SAX解析.pdf

    SAX解析是一种流式的XML解析方式,它使用了一种基于事件的模型来处理XML文档。开发者不需要在内存中构建整个文档的树形结构,而是通过响应XML解析器发出的事件来处理XML文档。这种方式特别适合处理大型的XML文件,...

    dom4j下sax解析xml

    在提供的“analysis_xml”项目中,很可能包含了一个示例,演示了如何使用dom4j的SAX解析器解析XML文件。这样的测试项目有助于理解SAX解析的工作原理,并在实际开发中应用。 总结起来,dom4j库提供了DOM和SAX两种XML...

    XML通过sax解析JSON格式

    1. **设置SAX解析器**:首先,我们需要创建一个`SAXParserFactory`实例,然后使用`newSAXParser()`方法获取`SAXParser`。这一步用于配置和初始化SAX解析器。 2. **创建自定义的SAX Handler**:创建一个扩展了`...

    SAX解析超大XML文件 示例代码

    以下是一个简单的SAX解析超大XML文件的Java示例代码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers....

    Servlet利用SAX解析XML文档

    4. **创建SAX解析器**:使用`SAXParserFactory`的`newInstance()`方法创建一个解析器工厂,然后调用`newSAXParser()`方法生成SAX解析器实例。 5. **实现ContentHandler**:创建一个实现了`org.xml.sax....

Global site tag (gtag.js) - Google Analytics