//判断网络状态
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"/>