异步请求网络

//判断网络状态

package com.bawei.test.net;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;

public class NetWorkUtils {
    public static final int G3 = 3;// 3G
    public static final int G2 = 2;// 2G
    public static final int G4 = 4;// 4G
    public static final int WIFI = 5;// WIFI
    public static final int NO = 0;

    public static int GetNetworkType(Context context) {
        int strNetworkType = NO;
        NetworkInfo networkInfo = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        
        if (networkInfo != null && networkInfo.isConnected()) {
            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                strNetworkType = WIFI;
            } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
                String _strSubTypeName = networkInfo.getSubtypeName();
                int networkType = networkInfo.getSubtype();
                switch (networkType) {
                case TelephonyManager.NETWORK_TYPE_GPRS:
                case TelephonyManager.NETWORK_TYPE_EDGE:
                case TelephonyManager.NETWORK_TYPE_CDMA:
                case TelephonyManager.NETWORK_TYPE_1xRTT:
                case TelephonyManager.NETWORK_TYPE_IDEN:
                    strNetworkType = G2;
                    break;
                case TelephonyManager.NETWORK_TYPE_UMTS:
                case TelephonyManager.NETWORK_TYPE_EVDO_0:
                case TelephonyManager.NETWORK_TYPE_EVDO_A:
                case TelephonyManager.NETWORK_TYPE_HSDPA:
                case TelephonyManager.NETWORK_TYPE_HSUPA:
                case TelephonyManager.NETWORK_TYPE_HSPA:
                case TelephonyManager.NETWORK_TYPE_EVDO_B:
                case TelephonyManager.NETWORK_TYPE_EHRPD:
                case TelephonyManager.NETWORK_TYPE_HSPAP:
                    strNetworkType = G3;
                    break;
                case TelephonyManager.NETWORK_TYPE_LTE:
                    strNetworkType = G4;
                    break;
                default:
                    if (_strSubTypeName.equalsIgnoreCase("TD-SCDMA")
                            || _strSubTypeName.equalsIgnoreCase("WCDMA")
                            || _strSubTypeName.equalsIgnoreCase("CDMA2000")) {
                        strNetworkType = G3;
                    } else {
                        strNetworkType = NO;
                    }

                    break;
                }

            }
        }

        return strNetworkType;
    }
}





//MainActivity 异步加载

package com.wanghang.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.bawei.test.net.NetWorkUtils;
import com.bawei.test.pullToRefresh.PullToRefreshLayout;
import com.bawei.test.pullToRefresh.PullableListView;
import com.bawei.test.pullToRefresh.PullToRefreshLayout.OnRefreshListener;
import com.wanghang.test.adapter.ListViewAdapter;
import com.wanghang.test.bean.Result;
import com.wanghang.test.util.HttpUtil;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Xml;
import android.widget.Toast;
import android.annotation.SuppressLint;
import android.app.Activity;

@SuppressLint("ShowToast")
public class MainActivity extends Activity {

    boolean b = true;
    int pn = 0;
    int rn = 6;
    private PullToRefreshLayout layout;
    private PullableListView lv;
    LinkedList<Result> list = new LinkedList<Result>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        layout = (PullToRefreshLayout) findViewById(R.id.layout);
        lv = (PullableListView) findViewById(R.id.lv);

//网络的连接状态

  int type = NetWorkUtils.GetNetworkType(this);

//异步加载

        MyAsyncTask task = new MyAsyncTask();

        if (NetWorkUtils.WIFI == type) {
            Toast.makeText(this, "你当前是你WIFI连接", 0).show();
            task.execute("http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=246&pn="
                    + pn + "&rn=" + rn + "&dtype=xml");
        } else if (NetWorkUtils.G2 == type || NetWorkUtils.G3 == type
                || NetWorkUtils.G4 == type) {
            Toast.makeText(this, "你当前是你移动网络连接", 0).show();
            task.execute("http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=246&pn="
                    + pn + "&rn=" + rn + "&dtype=xml");
        } else if (NetWorkUtils.NO == type) {
            Toast.makeText(this, "没有检测到网络", 0).show();
        }

        layout.setOnRefreshListener(new OnRefreshListener() {
            //下拉刷新
            @Override
            public void onRefresh(PullToRefreshLayout pullToRefreshLayout) {
                
                page = 1;
                pn += 3;
                MyAsyncTask task = new MyAsyncTask();
                task.execute("http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=246&pn="
                        + pn + "&rn=" + rn + "&dtype=xml");

                pullToRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
            }
//上拉加载
            @Override
            public void onLoadMore(PullToRefreshLayout pullToRefreshLayout) {
                page++;
                pn=0;
                rn += 3;
                MyAsyncTask task = new MyAsyncTask();
                task.execute("http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182&catalog_id=246&pn="
                        + pn + "&rn=" + rn + "&dtype=xml");
                
                pullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
            }
        });

    }

    private int page;

    class MyAsyncTask extends AsyncTask<String, Void, LinkedList<Result>> {

        @Override
        protected LinkedList<Result> doInBackground(String... params) {
            //网络请求
            InputStream in = HttpUtil.getInputStream(params[0]);
            //xml解析
            LinkedList<Result> linkedList = pull(in);
            return linkedList;
        }

        @Override
        protected void onPostExecute(LinkedList<Result> result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
               //是否第一次进入
            if (b) {
                list = result;
                adapter = new ListViewAdapter(MainActivity.this, list);
                lv.setAdapter(adapter);
                b = false;
            } else {

                if (page == 1) {
                    for (int i = 0; i < result.size(); i++) {
                        list.addFirst(result.get(i));
                    }
                }else{
                    list.addAll(result);
                }
                //刷新
                adapter.notifyDataSetChanged();
            }

        }

    }
    //pull解析

    private ListViewAdapter adapter;

    private LinkedList<Result> pull(InputStream in) {
        if (in != null) {
            XmlPullParser parser = Xml.newPullParser();
            try {
                parser.setInput(in, "utf-8");
                String name = "";
                Result result = null;

                int event = parser.getEventType();
                boolean isFlag = true;
                LinkedList<Result> listwanghang = null;
                while (isFlag) {
                    switch (event) {
                    case XmlPullParser.START_DOCUMENT:
                        listwanghang = new LinkedList<Result>();
                        break;
                    case XmlPullParser.START_TAG:
                        name = parser.getName();
                        if (name.equals("item")) {
                            result = new Result();
                        }
                        break;
                    case XmlPullParser.TEXT:
                        if (name.equals("title")) {
                            result.title = parser.getText();
                        } else if (name.equals("tags")) {
                            result.tags = parser.getText();
                        } else if (name.equals("img")) {
                            result.img = parser.getText();
                        } else if (name.equals("bytime")) {
                            result.bytime = parser.getText();
                        } else if (name.equals("reading")) {
                            result.reading = parser.getText();
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        name = parser.getName();
                        if (name.equals("item")) {
                            if (listwanghang != null) {
                                listwanghang.add(result);
                            }
                        }
                        name = "";
                        break;
                    case XmlPullParser.END_DOCUMENT:
                        isFlag = false;
                        break;
                    default:
                        break;
                    }
                    event = parser.next();
                }

                return listwanghang;
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return null;
    }

}





//adapter ListView 优化

package com.wanghang.test.adapter;

import java.util.ArrayList;
import java.util.LinkedList;

import com.lidroid.xutils.BitmapUtils;
import com.wanghang.test.R;
import com.wanghang.test.bean.Result;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {

    private Context context;
    private LinkedList<Result> list;

    public ListViewAdapter(Context context, LinkedList<Result> list) {
        
        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;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder;
        if(convertView==null){
            holder=new ViewHolder();
            convertView=View.inflate(context, R.layout.item, null);
            holder.img=(ImageView) convertView.findViewById(R.id.item_img);
            holder.title= (TextView) convertView.findViewById(R.id.item_title);
            holder.tags= (TextView) convertView.findViewById(R.id.item_tags);
            holder.reading= (TextView) convertView.findViewById(R.id.item_reading);
            holder.bytime= (TextView) convertView.findViewById(R.id.item_bytime);
            convertView.setTag(holder);
        }else{
            holder=(ViewHolder) convertView.getTag();
        }
        
        BitmapUtils bitmap=new BitmapUtils(context);
        bitmap.display(holder.img, list.get(position).img);
        holder.title.setText(list.get(position).title);
        holder.tags.setText(list.get(position).tags);
        holder.reading.setText(list.get(position).reading);
        holder.bytime.setText(list.get(position).bytime);
        return convertView;
    }

    class ViewHolder{
        ImageView img;
        TextView title;
        TextView tags;
        TextView reading;
        TextView bytime;
    
    }
}





//网络请求

public class HttpUtil {

    public static InputStream getInputStream(String uri){
        InputStream in=null;
        try {
            URL url=new URL(uri);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            in=conn.getInputStream();
            return in;
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        
        
        return in;
    }
}





//xml

<com.bawei.test.pullToRefresh.PullToRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <include layout="@layout/refresh_head" />

    <com.bawei.test.pullToRefresh.PullableListView

        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.bawei.test.pullToRefresh.PullableListView
>

    <include layout="@layout/load_more" />

</com.bawei.test.pullToRefresh.PullToRefreshLayout>







//清单



  <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值