`
zhengdl126
  • 浏览: 2530837 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

android网络请求连接util类

 
阅读更多
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;

/**
 * 网络连接辅助类
 *项目名称:xxxxxxxx
 * 
 * @author linchunda
 * 
 */
public class HttpUtil {
	private static final String TAG = "HttpUtil";

	/** 连接超时 */
	private static final int TIME_OUT = 5 * 1000;

	/**
	 * 发送post请求
	 * 
	 * @param strUrl
	 *            网址路径
	 * @param map
	 *            请求的参数
	 * @return 返回请求的结果
	 */
	public static String executePost(String strUrl, Map<String, String> map) {
		String result = null;
		BufferedReader reader = null;
		try {
			HttpClient client = new DefaultHttpClient();
			// HttpPost连接对象
			HttpPost request = new HttpPost();
			request.setURI(new URI(strUrl));

			// 使用NameValuePair来保存要传递的Post参数
			List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
			if (null != map) {
				for (Map.Entry<String, String> entry : map.entrySet()) {
					Log.i(TAG, entry.getKey() + "=>" + entry.getValue());
					postParameters.add(new BasicNameValuePair(entry.getKey(),
							entry.getValue()));
				}
			}
			// 设置字符集
			UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
					postParameters, "utf-8");
			request.setEntity(formEntity);

			HttpResponse response = client.execute(request);
			// HttpStatus.SC_OK表示连接成功
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				Log.i(TAG, "连接成功,连接状态码为:"
						+ response.getStatusLine().getStatusCode());
				reader = new BufferedReader(new InputStreamReader(response
						.getEntity().getContent()));

				StringBuffer strBuffer = new StringBuffer("");
				String line = null;
				while ((line = reader.readLine()) != null) {
					strBuffer.append(line);
				}
				result = strBuffer.toString();
				Log.i(TAG, result);
			} else {
				Log.i(TAG, "连接失败,连接状态码为:"
						+ response.getStatusLine().getStatusCode());
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
					reader = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return result;
	}

	/**
	 * 发送post请求
	 * 
	 * @param urlAddress
	 *            请求的路径
	 * @param map
	 *            请求的参数
	 * @return 返回请求后的结果
	 * @throws AccessUrlException
	 */
	public static String executeHttpPost(Context context, String urlAddress,
			Map<String, String> map) throws AccessUrlException,
			AccessTimeOutException {
		try {
			initSSL();
		} catch (KeyManagementException e1) {
			e1.printStackTrace();
		} catch (NoSuchAlgorithmException e1) {
			e1.printStackTrace();
		}
		SharedPreferences sharedPreferences = context.getSharedPreferences(
				"YinYiTong", Context.MODE_PRIVATE);
		String result = null;
		URL url = null;
		HttpURLConnection connection = null;
		InputStreamReader in = null;

		try {
			url = new URL(urlAddress);

			connection = (HttpURLConnection) url.openConnection();
			connection.setConnectTimeout(TIME_OUT);
			connection.setDoInput(true);// 使用 URL连接进行输入
			connection.setDoOutput(true);// 使用 URL连接进行输出
			connection.setUseCaches(false);// 忽略缓存
			connection.setRequestMethod("POST");
			connection.setRequestProperty("Content-Type",
					"application/x-www-form-urlencoded");
			connection.setRequestProperty("Charset", "utf-8");

			// session id
			String sessionId = sharedPreferences.getString("sessionId", "");
			if (!StringUtil.isEmpty(sessionId)) {
				connection.setRequestProperty("Cookie", sessionId);

			}

			StringBuilder params = new StringBuilder();
			// 设置参数
			if (null != map) {
				for (Map.Entry<String, String> entry : map.entrySet()) {
					Log.i(TAG, entry.getKey() + "=>" + entry.getValue());
					params.append(entry.getKey());
					params.append("=");
					params.append(URLEncoder.encode(entry.getValue(), "utf-8"));
					params.append("&");
				}
			}
			if (params.length() > 0)
				params.deleteCharAt(params.length() - 1);

			OutputStream outputStream = null;
			try {
				outputStream = connection.getOutputStream();
			} catch (Exception e) {
				Log.w(TAG, "访问服务器地址:" + urlAddress + "超时.");
				throw new AccessTimeOutException("访问服务器地址:" + urlAddress
						+ "超时.");
			}

			DataOutputStream dop = new DataOutputStream(outputStream);
			dop.write(params.toString().getBytes());
			dop.flush();
			dop.close();

			if (connection.getResponseCode() == HttpStatus.SC_OK) {
				Log.i(TAG, "connection status is 200");
				// 获取返回结果
				in = new InputStreamReader(connection.getInputStream());
				BufferedReader bufferedReader = new BufferedReader(in);
				StringBuffer strBuffer = new StringBuffer();
				String line = null;
				while ((line = bufferedReader.readLine()) != null) {
					strBuffer.append(line);
				}
				result = strBuffer.toString();
				Log.i(TAG, result);

				// session id不同,重新设置
				String session_value = connection.getHeaderField("Set-Cookie");
				if (!StringUtil.isEmpty(session_value)) {
					String[] sessionIds = session_value.split(";");
					Log.i(TAG, "sessionId=" + sessionIds[0]);
					if (null != sessionIds[0]
							&& !sessionIds[0].equalsIgnoreCase(sessionId)) {
						Editor editor = sharedPreferences.edit();
						editor.putString("sessionId", sessionIds[0]);
						editor.commit();
					}
				}
			} else {
				Log.w(TAG, "访问服务器异常,状态码为:" + connection.getResponseCode());
				throw new AccessUrlException("访问服务器异常,状态码为:"
						+ connection.getResponseCode());
			}
		} catch (MalformedURLException e) {
			Log.e(TAG, "[executeHttpPost]:", e);
		} catch (ProtocolException e) {
			Log.e(TAG, "[executeHttpPost]:", e);
		} catch (UnsupportedEncodingException e) {
			Log.e(TAG, "[executeHttpPost]:", e);
		} catch (IOException e) {
			Log.e(TAG, "[executeHttpPost]:", e);
		} finally {
			if (connection != null) {
				connection.disconnect();
			}
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					Log.e(TAG, "[executeHttpPost]InputStreamReader关闭异常:", e);
				}
			}
		}
		return result;
	}

	/**
	 * 接受任何证书,不考虑证书发行者及所在主机情况
	 * 
	 * @throws NoSuchAlgorithmException
	 * @throws KeyManagementException
	 */
	public static void initSSL() throws NoSuchAlgorithmException,
			KeyManagementException {
		// Create a trust manager that does not validate certificate chains
		TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
			public X509Certificate[] getAcceptedIssuers() {
				return null;
			}

			public void checkClientTrusted(X509Certificate[] certs,
					String authType) {
				// Trust always
			}

			public void checkServerTrusted(X509Certificate[] certs,
					String authType) {
				// Trust always
			}
		} };

		// Install the all-trusting trust manager
		SSLContext sc = SSLContext.getInstance("SSL");
		// Create empty HostnameVerifier
		HostnameVerifier hv = new HostnameVerifier() {
			public boolean verify(String arg0, SSLSession arg1) {
				return true;
			}
		};

		sc.init(null, trustAllCerts, new java.security.SecureRandom());
		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
		HttpsURLConnection.setDefaultHostnameVerifier(hv);
	}

	/**
	 * 检查网络连接
	 * 
	 * @param context
	 * @return 有可用的接连返回true,否则返回false
	 */
	public static boolean hasNetwork(Context context) {
		ConnectivityManager con = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo workinfo = con.getActiveNetworkInfo();
		if (workinfo == null || !workinfo.isAvailable()) {
			Log.w(TAG, "当前无网络连接......");
			return false;
		}
		return true;
	}

	@SuppressWarnings("serial")
	public static class AccessUrlException extends Exception {
		public AccessUrlException() {
			super();
		}

		public AccessUrlException(String msg) {
			super(msg);
		}

		@Override
		public String toString() {
			return super.toString();
		}
	}

	@SuppressWarnings("serial")
	public static class AccessTimeOutException extends Exception {
		public AccessTimeOutException() {
			super();
		}

		public AccessTimeOutException(String msg) {
			super(msg);
		}

		@Override
		public String toString() {
			return super.toString();
		}
	}
}

 

 

 

--------- 部分实例

 

try {
                    HttpResponse response = client.execute(myget);
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(response.getEntity()
                                    .getContent()));
                    for (String s = reader.readLine(); s != null; s = reader
                            .readLine()) {
                        builder.append(s);
                    }
                    JSONObject jsonObject = new JSONObject(builder.toString());
                    error = jsonObject.getInt("errno");
                    String errormsg = jsonObject.getString("errmsg");
                    Log.v("wgp",myget.getURI().toString());
                    Log.v("wgp", "error=" + error);
                    Log.v("wgp", "errormsg=" + errormsg);
                    if (error == 0) {
                        array = jsonObject.getJSONArray("data");
                        mFavoriteList = new ArrayList<FavoriteItem>();
                        FavoriteItem item = null;
                        String srcType;
                        for (int i = 0; i < array.length(); i++) {
                            item = new FavoriteItem();
                            item.setId(array.getJSONObject(i).getInt("id"));
                            item.setUserId(array.getJSONObject(i).getInt("userid"));
                            item.setUsername(array.getJSONObject(i).getString("username"));
                            item.setType(array.getJSONObject(i).getInt("type"));
                            item.setCid(array.getJSONObject(i).getInt("cid"));
                            item.setTitle(array.getJSONObject(i).getString("title"));
                            item.setUrl(array.getJSONObject(i).getString("url"));
                            item.setTag(array.getJSONObject(i).getString("tag"));
                            item.setSrc(array.getJSONObject(i).getString("src"));
                            item.setCreateDate(array.getJSONObject(i).getString("created"));
                            item.setModifiedDate(array.getJSONObject(i).getString("modified"));
                            srcType = array.getJSONObject(i).getString("src_type");
                            if(srcType != null && srcType.equals("cps")){
                                item.setSrc_type("industry");
                            }else{
                                item.setSrc_type(srcType);
                            }
                            mFavoriteList.add(item);
                        }
                        if (mFavoriteList.size() == 0) {
                            handler.sendEmptyMessage(-1);
                        } else {
                            handler.sendEmptyMessage(1);//更新主UI
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    handler.sendEmptyMessage(-1);
                } finally {
                }

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    android实时网络质量检测

    在Android平台上进行实时网络质量检测是一项重要的任务,它有助于开发者评估应用性能,优化网络请求,以及为用户提供流畅的网络体验。通常,我们可以利用系统内置的`ping`命令来实现这一功能。`ping`是一个用于测试...

    Android上传图片封装Util

    - 在封装Util类时,需要考虑各种可能出现的异常情况,如用户拒绝权限、图片选取失败、网络连接问题等,并给出相应的提示。 - 提供异步处理机制,避免阻塞UI线程,提升用户体验。 7. **代码组织**: - 为了保持...

    Android客户端抓取网络数据

    5. **util**模块:这个模块通常包含工具类,如网络请求的工具类NetUtil。NetUtil可以封装网络请求的通用逻辑,如创建OkHttpClient实例,设置超时时间,处理SSL证书等。此外,也可以包含处理JSON数据的工具类,如...

    Android util code

    4. **NetworkUtil**:网络状态检测与网络请求辅助工具类。 5. **DateUtil**:日期时间处理工具类,提供了日期的格式化、比较和转换等功能。 6. **IOUtil**:输入输出流操作工具类,简化文件读写和资源操作。 7. **...

    android网络

    在Android中,通常我们会创建一个工具类或Util类,里面包含一个静态方法来检查网络连接。例如,我们可以创建一个名为`NetworkUtils`的类,其中包含一个名为`isNetworkAvailable()`的方法。这个方法会使用Android的...

    Android权限整理(较全面)

    普通权限是Android系统中最常见的一类权限,通常用于应用程序的一些基本功能。这类权限默认被授予,并且不需要用户在安装过程中特别授权。以下是部分普通权限的详细介绍: 1. **android.permission.ACCESS_LOCATION...

    android工具类

    在Android开发中,工具类(Utility Class)是程序员经常创建的一种辅助类,它们通常包含一些静态方法,用于执行特定的任务,比如处理网络请求、管理数据库操作或者与时间相关的功能。以下是对这些知识点的详细说明:...

    Android 好用的各种工具类特别实用

    5. **网络请求工具类**:如`NetworkUtils`,包含检查网络连接状态、解析URL、获取IP地址等功能。这对于网络依赖性强的应用来说尤其重要。 6. **文件操作工具类**:`FileUtils`可以帮助开发者轻松地读写文件、创建...

    Android史上最全工具类

    5. **NetWorkUtil**:网络状态检测工具类,检查网络连接是否可用,区分WIFI和移动数据,有助于在网络不稳定时做出相应提示。 6. **JsonUtil**:JSON数据的解析和序列化工具类,可以将Java对象转换成JSON字符串,或...

    Android网络开发详解

    - **设置连接参数**:在发起实际的网络请求之前,可以通过`setConnectTimeout()`等方法设置超时时间、请求头等参数。 - **连接到服务器**:调用`connect()`方法来建立与服务器的连接。 - **向服务器写数据**:如果...

    Android 开发常用的工具类

    - Android提供了`java.util.Calendar`、`java.text.SimpleDateFormat`和`java.time`包(API 26+)等类处理日期和时间。工具类可以封装这些功能,便于在应用中统一格式化和计算日期。 10. **图片处理工具类**: - ...

    Android敏捷开发常用工具类

    在Android开发中,字符串操作无处不在,StringUtil类通常包含了如字符串格式化、校验、拼接、截取等方法。例如,可以提供trim()方法去除字符串首尾空格,contains()方法检查字符串是否包含特定子串,以及isEmpty()...

    安卓开发框架工具类相关-Android开发的通用工具类.zip

    在Android开发中,工具类通常以Utils、Helper或者Constants等命名,它们封装了如字符串处理、日期时间操作、网络请求、数据序列化、权限检查等各种常用功能。开发者应该能够在这个文件夹里找到各种以特定功能命名的...

    Android10个常用工具类

    它可以包含`isNetworkAvailable()`方法来检测设备是否已连接到网络,以及`sendHttpRequest()`方法用于执行网络请求,通常会结合Retrofit或Volley等网络库。 2. **单位转换工具类**:在Android应用中,可能需要将...

    Android-Android快速开发工具类收集

    "Android-Android快速开发工具类收集" 是一个整理了多个常用工具类的资源,旨在提高开发效率,减少网络搜索时间。下面将详细介绍这个资源中的关键知识点和可能包含的功能。 1. **StringUtil**: 字符串处理工具类,...

    Android通过jsp连接Oracle数据库 -- 实例.docx

    1. **设置JSP页面头部**:在JSP页面中,我们使用`&lt;%@ page ... %&gt;`指令来导入必要的Java库,例如`java.sql.*`和`java.util.*`,这些库包含了处理数据库连接和结果集所需的类。 2. **数据库连接**:在JSP中,通过`...

    android 工具类 (超全) 集合打包拿走不谢~

    - 网络工具类:处理网络请求,如HTTP请求、WebSocket连接、下载上传等,可能封装了OkHttp、Retrofit等库。 - 日志工具类:提供日志打印,方便调试,支持自定义日志级别和过滤规则。 - 时间日期工具类:对日期时间...

    android常用的工具类

    6. **NetworkUtil**: 网络状态检测工具类,可以检查网络是否连接,是WiFi还是移动数据,以及网络是否可用。例如,`isNetworkAvailable()`可以判断设备是否已连接到网络。 7. **GsonUtil**: JSON解析工具类,基于...

    安卓各种实用util

    在Android开发中,Utils类通常被用来封装一些通用的、跨模块的方法,以提高代码的复用性和可维护性。"安卓各种实用util"这个主题涵盖了许多方便开发者使用的工具类和方法。以下是一些可能包含在这样的Utils集合中的...

    android工具包

    5. **AsyncTask**或`java.util.concurrent`包下的线程工具,用于在后台执行网络任务,避免阻塞主线程。 **字符串处理** 在Android开发中,字符串处理也是非常常见的操作,"android工具包"可能包括了以下功能: 1....

Global site tag (gtag.js) - Google Analytics