package com.kull.android;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.DefaultedHttpParams;
import org.apache.http.params.HttpParams;
import com.kull.StringHelper;
import com.kull.douban.BaseEntity;
import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.StrictMode;
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public class NetworkHelper{
public enum NetworkType{
none,wifi,cnnet,cnwap,unknow
}
public static int BUFFER_SIZE = 2048;
public static String streamToString(InputStream is) throws IOException{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] data = new byte[BUFFER_SIZE];
int count = -1;
while((count = is.read(data,0,data.length)) != -1) {
outStream.write(data, 0, count);
outStream.flush();
}
data = null;
String str=outStream.toString();
outStream.close();
outStream=null;
//System.runFinalization();
return str;
}
public static String doGet(String url) throws Exception{
InputStream is= new URL(url).openStream();
String context= streamToString(is);
is.close();
is=null;
System.gc();
return context;
}
public static String doGet(String url,HttpGet httpGet,HttpResponse httpResponse) throws Exception{
//httpGet=httpGet==null?new HttpGet(url):httpGet;
//httpResponse=new DefaultHttpClient().execute(httpGet);
InputStream is= doGetStream(url, httpGet, httpResponse);
String context= streamToString(is);
is.close();
is=null;
System.gc();
return context;
}
public static InputStream doGetStream(String url,HttpGet httpGet,HttpResponse httpResponse) throws Exception{
httpGet=httpGet==null?new HttpGet(url):httpGet;
httpResponse=new DefaultHttpClient().execute(httpGet);
InputStream is= httpResponse.getEntity().getContent();
return is;
}
public static String doPost(String url,Map<String, Object> params,HttpPost httpPost,HttpResponse httpResponse)throws Exception{
//HttpParams httpparams=new BasicHttpParams();
List <NameValuePair> nvps=new ArrayList<NameValuePair>();
for(String key :params.keySet()){
//httpparams.setParameter(key, params.get(key));
nvps.add(new BasicNameValuePair(key, params.get(key).toString()));
}
httpPost=httpPost==null?new HttpPost(url):httpPost;
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
httpResponse=new DefaultHttpClient().execute(httpPost);
InputStream is=httpResponse.getEntity().getContent();
String context=streamToString(is);
is.close();
is=null;
System.gc();
return context;
}
public static String doPost(String url,HttpParams params,HttpPost httpPost,HttpResponse httpResponse)throws Exception{
httpPost=httpPost==null?new HttpPost(url):httpPost;
//httpPost.setParams(params);
DefaultedHttpParams dhp=new DefaultedHttpParams(params, params);
httpResponse=new DefaultHttpClient(dhp).execute(httpPost);
InputStream is=httpResponse.getEntity().getContent();
String context=streamToString(is);
is.close();
is=null;
System.gc();
return context;
}
public static NetworkType checkNetwork(Context context){
NetworkType netType = NetworkType.none;
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo == null) {
return NetworkType.none;
}
int nType = networkInfo.getType();
if (nType == ConnectivityManager.TYPE_MOBILE) {
String extraInfo = networkInfo.getExtraInfo();
if(StringHelper.isNotBlank(extraInfo)){
if (extraInfo.toLowerCase().equals("cmnet")) {
netType = NetworkType.cnnet;
} else {
netType = NetworkType.cnwap;
}
}else{
return NetworkType.unknow;
}
} else if (nType == ConnectivityManager.TYPE_WIFI) {
netType = NetworkType.wifi;
}
return netType;
}
public static void enableNetwrokOnMainThread(){
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
}