pull解析请求网络的数据(带分页加载,刷新) xlistview HttpUtils



在请求下的数据中,其中不免有xml数据,反正我是不经常碰到,但是也小小的研究了一下,这里我们就简单的解析一下xml数据~~(这里涉及到刷新和加载和展示数据,可能代码会长一点,请大家耐心一点)

---------这里引入Xlistview 第三方类库--------实现基本的框架

--------------主布局activity_main---------//一个listview展示数据
<span style="font-size:18px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical"  
     >  
    <me.maxwin.view.XListView  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:id="@+id/xlistview"  
        />  
      
  
</LinearLayout>  </span>

------------list_item---------------------//展示listview数据
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical" >  
      
    <LinearLayout   
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:orientation="horizontal"  
        >  
        <ImageView   
            android:layout_width="40dp"  
            android:layout_height="40dp"  
            android:id="@+id/item_toux"  
            android:src="@drawable/ic_launcher"  
            />  
        <TextView   
            android:layout_width="wrap_content"  
            android:layout_height="40dp"  
            android:text="昵称"  
            android:layout_marginLeft="20dp"  
            android:id="@+id/item_nicheng"  
            android:gravity="center_vertical"  
            android:textColor="#f00"  
            />  
    </LinearLayout>  
    <TextView   
        android:layout_marginTop="10dp"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:id="@+id/item_title"  
        android:text="新闻标题"  
        android:maxLines="1"  
        android:ellipsize="end"  
        />  
    <ImageView   
        android:layout_width="match_parent"  
        android:layout_height="140dp"  
        android:src="@drawable/ic_launcher"  
        android:id="@+id/item_news_iv"  
        />  
      
      
  
</LinearLayout>  </span>

----------------------------MainActivity-------------------重要方法解释

这里pull解析方法    将拿到的流解析
//初始化集合  
        List<Reason> list=new ArrayList<Reason>();  
          
        XmlPullParser parser = Xml.newPullParser();  
        try {  
            parser.setInput(stream, "utf-8");  
              
            //开始解析  
            int type = parser.getEventType();  
            //循环 如果不结束文档  
            while(type!=XmlPullParser.END_DOCUMENT){  
                String name=parser.getName();  
                switch (type) {  
                //开始节点  
                case XmlPullParser.START_TAG:  
                    if(name.equals("tweet")){  
                        reason = new Reason();  
                    }else if(name.equals("portrait")){  
                        reason.setPortrait(parser.nextText());  
                    }else if(name.equals("body")){  
                        reason.setBody(parser.nextText());  
                    }else if(name.equals("imgSmall")){  
                        reason.setImgSmall(parser.nextText());  
                    }else if(name.equals("name")){  
                        reason.setName(parser.nextText());  
                    }  
                    break;  
                    //结束节点  
                case XmlPullParser.END_TAG:  
                    if(name.equals("tweet")){  
                        //存入集合  
                        list.add(reason);  
                          
                        //清除  重新开始节点解析  
                        reason=null;  
                    }  
                    break;  
  
                default:  
                    break;  
                }  
                  
                type=parser.next();  
            }  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  

这里是请求数据的方法

// TODO Auto-generated method stub  
        HttpUtils utils = new HttpUtils();  
  
        // 超时时间  
        utils.configCurrentHttpCacheExpiry(5000);  
        // get请求方式 请求地址url 回调接口  
        String myPath = path + "?uid=0&pageIndex=" + index + "&pageSize=20";  
        utils.send(HttpMethod.GET,  
                myPath,  
                new RequestCallBack<String>() {  
                    @Override  
                    public void onFailure(HttpException arg0, String arg1) {  
                        // TODO Auto-generated method stub  
                        // 请求数据失败  
                    }  
  
                    @Override  
                    public void onSuccess(ResponseInfo<String> arg0) {  
                        reultData = arg0.result;  
                        arrayInputStream = new ByteArrayInputStream(  
                                reultData.getBytes());  
                        // 解析数据xml  
                        handler.sendEmptyMessage(1);  
                    }  
                });  

-----------------------MainActivity---------------------

import java.io.ByteArrayInputStream;  
import java.io.InputStream;  
import java.util.ArrayList;  
import java.util.List;  
  
import org.xmlpull.v1.XmlPullParser;  
import org.xmlpull.v1.XmlPullParserException;  
  
import com.hao.bean.Reason;  
import com.lidroid.xutils.HttpUtils;  
import com.lidroid.xutils.exception.HttpException;  
import com.lidroid.xutils.http.ResponseInfo;  
import com.lidroid.xutils.http.callback.RequestCallBack;  
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;  
  
import me.maxwin.view.XListView;  
import me.maxwin.view.XListView.IXListViewListener;  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.util.Log;  
import android.util.Xml;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.widget.Adapter;  
  
public class MainActivity extends Activity implements IXListViewListener {  
  
    private XListView xlistview;  
    private String reultData;  
    private String path = "http://www.oschina.net/action/api/tweet_list";  
    private int index = 0;  
    private ByteArrayInputStream arrayInputStream;  
    private MyListAdapter adapter;  
    private List<Reason> list1=new ArrayList<Reason>();  
    private Handler handler = new Handler() {  
          
        public void handleMessage(android.os.Message msg) {  
            switch (msg.what) {  
            case 1:  
                // xml_jiexi  
                List<Reason> list = xml_jiexi(arrayInputStream);  
                  
                if(isRefresh){  
                    list1.clear();  
                }  
                list1.addAll(list);  
//              //打印集合  
//              //适配器  
//              xlistview.setAdapter(adapter);  
                if (adapter == null) {  
                    adapter = new MyListAdapter(MainActivity.this,list1);  
                    xlistview.setAdapter(adapter);  
                } else {  
                    adapter.notifyDataSetChanged();  
                }  
                // 消失进度  
                onLoad();  
                break;  
  
            default:  
                break;  
            }  
        };  
    };  
    private Reason reason;  
    boolean isRefresh = false;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        xlistview = (XListView) findViewById(R.id.xlistview);  
        xlistview.setPullLoadEnable(true);  
        xlistview.setPullRefreshEnable(true);  
        xlistview.setXListViewListener(this);  
  
        // 请求网络数据  
        request_Data();  
  
    }  
  
    protected List<Reason> xml_jiexi(InputStream stream) {  
        // TODO Auto-generated method stub  
        //初始化集合  
        List<Reason> list=new ArrayList<Reason>();  
          
        XmlPullParser parser = Xml.newPullParser();  
        try {  
            parser.setInput(stream, "utf-8");  
              
            //开始解析  
            int type = parser.getEventType();  
            //循环 如果不结束文档  
            while(type!=XmlPullParser.END_DOCUMENT){  
                String name=parser.getName();  
                switch (type) {  
                //开始节点  
                case XmlPullParser.START_TAG:  
                    if(name.equals("tweet")){  
                        reason = new Reason();  
                    }else if(name.equals("portrait")){  
                        reason.setPortrait(parser.nextText());  
                    }else if(name.equals("body")){  
                        reason.setBody(parser.nextText());  
                    }else if(name.equals("imgSmall")){  
                        reason.setImgSmall(parser.nextText());  
                    }else if(name.equals("name")){  
                        reason.setName(parser.nextText());  
                    }  
                    break;  
                    //结束节点  
                case XmlPullParser.END_TAG:  
                    if(name.equals("tweet")){  
                        //存入集合  
                        list.add(reason);  
                          
                        //清除  重新开始节点解析  
                        reason=null;  
                    }  
                    break;  
  
                default:  
                    break;  
                }  
                  
                type=parser.next();  
            }  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
        return list;  
    }  
  
    private void request_Data() {  
        // TODO Auto-generated method stub  
        HttpUtils utils = new HttpUtils();  
  
        // 超时时间  
        utils.configCurrentHttpCacheExpiry(5000);  
        // get请求方式 请求地址url 回调接口  
        String myPath = path + "?uid=0&pageIndex=" + index + "&pageSize=20";  
        utils.send(HttpMethod.GET,  
                myPath,  
                new RequestCallBack<String>() {  
                    @Override  
                    public void onFailure(HttpException arg0, String arg1) {  
                        // TODO Auto-generated method stub  
                        // 请求数据失败  
                    }  
  
                    @Override  
                    public void onSuccess(ResponseInfo<String> arg0) {  
                        reultData = arg0.result;  
                        arrayInputStream = new ByteArrayInputStream(  
                                reultData.getBytes());  
                        // 解析数据xml  
                        handler.sendEmptyMessage(1);  
                    }  
                });  
    }  
  
    private void onLoad() {  
        // lv.addHeaderView(lv, data, false);  
        xlistview.stopRefresh();  
        xlistview.stopLoadMore();  
        xlistview.setRefreshTime("刚刚");  
    }  
  
    @Override  
    public void onRefresh() {  
        // TODO Auto-generated method stub  
        //刷新的时候  下标还是显示一  
        index=0;  
        isRefresh=true;  
        //重新请求数据  
        request_Data();  
    }  
  
    @Override  
    public void onLoadMore() {  
        // TODO Auto-generated method stub  
        index++;  
          
        isRefresh=false;  
          
        //重新请求数据  
        request_Data();  
    }  
}  

-------------------------Reason---------------------//bean类  //作为解析数据的封装类


public class Reason {  
      
    private String portrait;//头像  
    private String body;//内容  
    private String imgSmall;//图片内容  
    private String name;  
      
    public String getPortrait() {  
        return portrait;  
    }  
    public void setPortrait(String portrait) {  
        this.portrait = portrait;  
    }  
    public String getBody() {  
        return body;  
    }  
    public void setBody(String body) {  
        this.body = body;  
    }  
    public String getImgSmall() {  
        return imgSmall;  
    }  
    public void setImgSmall(String imgSmall) {  
        this.imgSmall = imgSmall;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    @Override  
    public String toString() {  
        return "Reason [portrait=" + portrait + ", body=" + body  
                + ", imgSmall=" + imgSmall + ", name=" + name + "]";  
    }  
      
      
  
}  

--------------------MyListAdapter--------------------//适配器


import java.util.List;  
  
import com.hao.bean.MyView;  
import com.hao.bean.Reason;  
import com.nostra13.universalimageloader.core.DisplayImageOptions;  
import com.nostra13.universalimageloader.core.ImageLoader;  
  
import android.content.Context;  
import android.graphics.Bitmap.Config;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.BaseAdapter;  
import android.widget.ImageView;  
import android.widget.TextView;  
  
public class MyListAdapter extends BaseAdapter {  
    private Context context;  
    private List<Reason> list;  
    //图片配置    
    private DisplayImageOptions options = new DisplayImageOptions.Builder()      
    .cacheInMemory(true)      
    .cacheOnDisk(true)      
    .bitmapConfig(Config.RGB_565)      
    .build();     
    private DisplayImageOptions options1 = new DisplayImageOptions.Builder()      
    .cacheInMemory(true)      
    .cacheOnDisk(true)      
    .displayer(new MyView(1))//调用上方方法   
    .bitmapConfig(Config.RGB_565)      
    .build();   
      
      
  
    public MyListAdapter(Context context, List<Reason> list) {  
        super();  
        this.context = context;  
        this.list = list;  
    }  
  
    @Override  
    public int getCount() {  
        // TODO Auto-generated method stub  
        return list.size();  
    }  
  
    @Override  
    public Object getItem(int position) {  
        // TODO Auto-generated method stub  
        return list.get(position);  
    }  
  
    @Override  
    public long getItemId(int position) {  
        // TODO Auto-generated method stub  
        return position;  
    }  
    private ViewHolder holder;  
    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        holder = new ViewHolder();  
        if(convertView==null){  
            convertView=View.inflate(context, R.layout.list_item, null);  
            holder.item_news_iv=(ImageView) convertView.findViewById(R.id.item_news_iv);  
            holder.item_toux=(ImageView) convertView.findViewById(R.id.item_toux);  
            holder.item_nicheng=(TextView) convertView.findViewById(R.id.item_nicheng);  
            holder.item_title=(TextView) convertView.findViewById(R.id.item_title);  
              
            convertView.setTag(holder);  
        }else{  
            holder=(ViewHolder) convertView.getTag();  
            if(holder.item_nicheng.equals("")){  
                holder.item_nicheng.setText("这家伙没有昵称");  
            }else{  
            holder.item_nicheng.setText(list.get(position).getName());  
            }  
            holder.item_title.setText(list.get(position).getBody());  
              
            if(list.get(position).getImgSmall().equals("")){  
                holder.item_news_iv.setImageResource(R.drawable.ic_launcher);  
            }else{  
                 ImageLoader.getInstance().displayImage(list.get(position).getImgSmall(), holder.item_news_iv, options);  
            }  
             ImageLoader.getInstance().displayImage(list.get(position).getPortrait(), holder.item_toux, options1);  
        }  
        return convertView;  
    }  
      
    class ViewHolder{  
        ImageView item_news_iv,item_toux;  
        TextView item_nicheng,item_title;  
    }  
}  

-------------------------MyAppLication---------------------配置IMageLoader  


import com.nostra13.universalimageloader.core.ImageLoader;  
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;  
  
import android.app.Application;  
  
public class MyLication extends Application{  
      
  
    @Override  
    public void onCreate() {  
        // TODO Auto-generated method stub  
        super.onCreate();  
        // 创建默认的ImageLoader配置参数    
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(    
                this).writeDebugLogs() // 打印log信息    
                .build();    
    
        // Initialize ImageLoader with configuration.    
        ImageLoader.getInstance().init(configuration);   
    }  
  
}  

------------------------MyView-------------------------//画圆  头像作为圆形图片显示

 作为全局 ImageLoader加载时使用


import android.graphics.Bitmap;    
import android.graphics.BitmapShader;    
import android.graphics.Canvas;    
import android.graphics.ColorFilter;    
import android.graphics.Matrix;    
import android.graphics.Paint;    
import android.graphics.PixelFormat;    
import android.graphics.Rect;    
import android.graphics.RectF;    
import android.graphics.Shader;    
import android.graphics.drawable.Drawable;    
     
    
  
import com.nostra13.universalimageloader.core.assist.LoadedFrom;    
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;  
import com.nostra13.universalimageloader.core.imageaware.ImageAware;    
public class MyView extends RoundedBitmapDisplayer{    
    
    public MyView(int cornerRadiusPixels) {    
        super(cornerRadiusPixels);    
        // TODO Auto-generated constructor stub    
    }    
     @Override    
        public void display(Bitmap bitmap, ImageAware imageAware,    
                            LoadedFrom loadedFrom) {    
            imageAware.setImageDrawable(new CircleDrawable(bitmap, margin));    
        }    
         
        public static class CircleDrawable extends Drawable {    
            private final int margin;    
            private final RectF mRect = new RectF();    
            private final BitmapShader bitmapShader;    
            private final Paint paint;    
            private RectF mBitmapRect;    
         
            public CircleDrawable(Bitmap bitmap, int margin) {    
                this.margin = 0;    
                // 创建着色器    
                bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,    
                        Shader.TileMode.CLAMP);    
                mBitmapRect = new RectF(margin, margin, bitmap.getWidth() - margin,    
                        bitmap.getHeight() - margin);    
                // 设置画笔    
                paint = new Paint();    
                paint.setAntiAlias(true);    
                paint.setShader(bitmapShader);    
            }    
         
            // 画圆,覆盖原来的位图    
            @Override    
            protected void onBoundsChange(Rect bounds) {    
                super.onBoundsChange(bounds);    
                mRect.set(margin, margin, bounds.width() - margin, bounds.height()    
                        - margin);    
         
                // 调整位图,设置该矩阵,转换映射源矩形和目的矩形    
                Matrix shaderMatrix = new Matrix();    
                shaderMatrix.setRectToRect(mBitmapRect, mRect,    
                        Matrix.ScaleToFit.FILL);    
                // 设置着色器矩阵    
                bitmapShader.setLocalMatrix(shaderMatrix);    
            }    
         
            // 画出其边界(通过设置的setBounds)    
            @Override    
            public void draw(Canvas canvas) {    
                canvas.drawRoundRect(mRect, mRect.width()/2 , mRect.height()/2,    
                        paint);    
            }    
         
            /**  
             * 返回此绘制对象的不透明度/透明度 ,返回的值是抽象的格式常数的PixelFormat之一:未知,半透明,透明或不透明  
             * */    
            @Override    
            public int getOpacity() {    
                // 半透明    
                return PixelFormat.TRANSLUCENT;    
            }    
         
            // 设置透明度    
            @Override    
            public void setAlpha(int alpha) {    
                paint.setAlpha(alpha);    
            }    
         
            // 彩色滤光片(通过设置setColorFilter)    
            @Override    
            public void setColorFilter(ColorFilter cf) {    
                paint.setColorFilter(cf);    
            }    
        }    
}    



源码下载  下载地址!!!

最后别忘了加联网权限和配置application,这里一个请求带xml解析与优化展示  刷新就完成了 ,
                                                                                                              -----------------------------仅供参考----------------------- 
                                                                                                                                        转载请注明出处:点击打开链接


源码下载  下载地址!!!

最后别忘了加联网权限和配置application,这里一个请求带xml解析与优化展示  刷新就完成了 ,
                                                                                                              -----------------------------仅供参考----------------------- 
                                                                                                                                        转载请注明出处:点击打开链接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值