package com.letv.star.net;
import java.net.URLEncoder;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
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.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.os.Bundle;
public class HttpUtil {
public static String doGet(Context context , String url, Bundle params){
if(!isNetworkConnected(context)){
return null ;
}
if(params != null && params.size() > 0){
url += encodeUrl(params);
}
String data = "";
try{
HttpGet httpGet = new HttpGet(url);
BasicHttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,5000);
HttpConnectionParams.setSoTimeout(httpParams,5000);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);
HttpResponse httpResponse = httpClient.execute(httpGet);
if(httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK){
throw new Exception();
}
HttpEntity httpEntity = httpResponse.getEntity();
data = EntityUtils.toString(httpEntity);
}catch (Exception e) {
e.printStackTrace();
}
return data;
}
public static String doPost(Context context ,String url, Bundle params){
if(!isNetworkConnected(context)){
return null ;
}
String data = "";
try{
HttpPost httpPost = new HttpPost(url);
BasicHttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,5000);
HttpConnectionParams.setSoTimeout(httpParams,5000);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);
if(params != null && params.size() > 0){
httpPost.setEntity(new UrlEncodedFormEntity(bundle2NameValuePair(params) , HTTP.UTF_8));
}
HttpResponse httpResponse = httpClient.execute(httpPost);
if(httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK){
throw new Exception();
}
HttpEntity entity = httpResponse.getEntity();
data = EntityUtils.toString(entity);
}catch (Exception e) {
e.printStackTrace();
}
return data ;
}
public static ArrayList<NameValuePair> bundle2NameValuePair(Bundle params){
ArrayList<NameValuePair> parameters = new ArrayList<NameValuePair>() ;
for (String key : params.keySet()) {
NameValuePair pair = new BasicNameValuePair(key, params.getString(key));
parameters.add(pair);
}
return parameters ;
}
/**
* 将Key-value转换成用&号链接的URL查询参数形式。
*
* @param parameters
* @return
*/
public static String encodeUrl(Bundle parameters) {
if (parameters == null) {
return "";
}
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String key : parameters.keySet()) {
if (first) {
first = false;
} else {
sb.append("&");
}
sb.append(key + "=" + URLEncoder.encode(parameters.getString(key)));
}
return sb.toString();
}
/**
* 检查当前网络连接状态
* @param
* 调用此方法的Context
* @return
* true - 有可用的网络连接(3G/GSM、wifi等)
* false - 没有可用的网络连接,或传入的context为null
*/
public static boolean isNetworkConnected(Context context) {
if(context == null){
return false;
}
ConnectivityManager connManager =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
// State mobileState = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
// State wifiState = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
// if(mobileState == State.DISCONNECTED && wifiState == State.DISCONNECTED) {
// return false;
// }
// return true;
NetworkInfo info = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(info == null || info.getState() == State.DISCONNECTED){
return false;
}
return true;
}
}