ListView的数据异步加载与AsyncTask

ListView的数据异步加载与AsyncTask

主活动

公共 类 MainActivity 延伸活动{
    ListView中的ListView;
    文件缓存;
    
    处理程序处理程序处理程序(){
         公共无效的handleMessage(消息msg){ 
             
            / / 异步加载完后的图片数据集合 
             listView.setAdapter(新 ContactAdapter(MainActivity. 此,(列表<联系人> )msg.obj,
                     R.layout.listview_item,高速缓存));
        }        
    };
    
    @覆盖
    公共 无效的onCreate(捆绑savedInstanceState){
         超级的onCreate(savedInstanceState);
        的setContentView(R.layout.main);
        LISTVIEW =(ListView中)。findViewById(R.id.listView)的;
        
        / / 图片的缓存目录 
        缓存= 新的文件(Environment.getExternalStorageDirectory(),“缓存” );
         如果(()) ! cache.exists cache.mkdirs();
        
        新的主题(新的Runnable(){            
             公共 无效的run(){
                 尝试{
                     / / 加载的是名字和图片URL信息 
                    列表<Contact>数据ContactService.getContacts();
                    handler.sendMessage handler.obtainMessage( 22 ,数据);

                } 赶上(例外五){
                    e.printStackTrace();
                }
            }
        })();       
    }

    @覆盖
    保护 无效的OnDestroy(){
         (文件文件:cache.listFiles()){
            file.delete();
        }
        cache.delete();
        超级的OnDestroy();
    }
    
}

内容服务类ContactService

公共 类ContactService的{
  
      / ** 
       *获取联系人
       * @返回
       / 
      的 静态列表<联系人> getContacts()抛出异常{
          路径String =“http://192.168.1.100:8080/网络/ list.xml“ ;
          HttpURLConnection类康恩= == 200 ){
的回报ParseXML中(conn.getInputStream());
         }
 返回空;
     }
 18 私人静态列表<联系人> ParseXML中(InputStream中的XML)抛出异常{
 20          <联系人>联系人= 新的ArrayList <联系人> ();
 时21          联系方式联系方式= 空;
 月23日          XmlPullParser pullParser Xml.newPullParser();
          pullParser.setInput(XML,“UTF-8” );
 整数事件pullParser.getEventType();
 27(事件!= XmlPullParser.END_DOCUMENT的){
 29 开关(事件){
 例XmlPullParser.START_TAG:
 32(“接触” 。等于(pullParser.getName())){
 34                      接触新的联系方式();
                      contact.id pullParser.nextText();
 40                  } (“图像” 。等于(pullParser.getName())){
                      contact.image =                      = 空;
                 }
 突破51             }
              事件pullParser.next();
         }
 返回接触;
     }
 / ** 57      *
图片路径
      * @返回60 * / 61 公共静态开放的getImage(弦乐路径,文件CACHEDIR),抛出异常{ / / 路径- > MD5 - > 32字符串。JPG 62 63          文件】localfile = 新的文件(CACHEDIR,MD5.getMD5 (路径)+              康恩= == 200 ){
                  文件输出流outStream = 新的文件输出流(当前文件);
                  的InputStream输入流= conn.getInputStream();
 字节 []缓冲区= 新的字节 [1024 ]
 LEN = 0 ;
 时((LEN = InputStream中阅读(缓冲区))!= -1 ){
                      outStream.write(缓冲,0 ,

适配器适配器

公共 类 ContactAdapter的扩展BaseAdapter的{
      私人名单<联系人> 数据;
      私人 诠释ListViewItem的
      私人文件缓存;
      LayoutInflater layoutInflater
      
的     公共 ContactAdapter(上下文的背景下,列表<联系人>的数据,ListViewItem的文件缓存){
。数据= 数据;
。ListViewItem的ListViewItem的;
。缓存缓存;
          layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     }
 / ** 14      *得到数据的总数
 * 公众诠释/ 16 getCount(){
的回报data.size();
     }
 / ** 20      *根据数据索引得到集合所对应的数据
 * / 22 公共对象的getItem(INT 位置){
 返回data.get (位置);
     }
 26 长 getItemId(INT 位置){
 返回位置;
     }
 30 公共查看getView(位置,查看convertView,ViewGroup的母公司){
          ImageView的ImageView的31 = 空;
          TextView的TextView的空;
 34 如果(convertView == 空){
              convertView = layoutInflater.inflate(ListViewItem的,NULL );
              ImageView的= (ImageView的)convertView.findViewById(R.id.imageView)
              TextView的= (TextView的)convertView.findViewById“(R id.textView);
 ImageView的,新的DataWrapper(TextView的)38              convertView.setTag();
          } 其他{
的              DataWrapper dataWrapper = (DataWrapper)convertView.getTag()的
              ImageView的dataWrapper.imageView
              TextView的dataWrapper.textView    
         }
          联系方式联系方式data.get(位置);
         (contact.name)textView.setText;
          asyncImageLoad(ImageView的,ImageView的路径String){
          AsyncImageTask asyncImageTask 整,开放“ {
 私人ImageView的ImageView的;
 60 公共AsyncImageTask(ImageView的ImageView的){
 本。ImageView的ImageView的
         }
 保护开放的doInBackground(String. .. PARAMS)高速缓存);
              } 的catch (例外五){
                 e.printStackTrace();
             }
 返回空;
         }
 74 保护无效 onPostExecute(乌里结果)的{ / / 运行在主线程75 如果(result! = 空 && ImageView的
 公共TextView的TextView的;
 84 公共DataWrapper(ImageView的ImageView的,TextView的TextView的){
 本。ImageView的ImageView的;
 本。TextView的TextView的;
         }
     }
 }

MD5 算法,根据路径生成MD5值

2  
      公共 静态字符串getMD5(String内容){
          尝试{
 公共类MD5
              消息摘要消化5 = E){
             e.printStackTrace();
         }
 返回空;
     }
 15 私人静态字符串getHashString(消息摘要摘要){
          StringBuilder的建设者= 新的StringBuilder();
(字节的的B:digest.digest()) {
              builder.append(Integer.toHexString((B >> 4)&0xf的情况));
              builder.append(Integer.toHexString(B&0xf会)的);
         }
的回报builder.toString();
     }
 }

 

 

 

 

 

转载于:https://www.cnblogs.com/geben/archive/2012/09/26/2704202.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值