现在的位置: 首页 > 综合 > 正文

Util工具类 URLConnectionUtil – 20141211 封装为访问网络框架

2018年05月21日 ⁄ 综合 ⁄ 共 13533字 ⁄ 字号 评论关闭

输入访问地址和参数 返回流

/**
 * 参考 [http://blog.csdn.net/chenlaic/article/details/6208292]
 */
public class URLConnectionUtil {

	private static final String TAG = "URLConnectionUtil";

	private static final String POST = "POST";
	private static final String GET = "GET";
	private static final String DELETE = "DELETE";
	private static final String PUT = "PUT";

	private static String prepareParam(Map<String, Object> paramMap) {
		StringBuffer sb = new StringBuffer();
		if (paramMap == null || paramMap.isEmpty()) {
			return "";
		} else {
			for (String key : paramMap.keySet()) {
				String value = (String) paramMap.get(key);
				if (sb.length() < 1) {
					sb.append(key).append("=").append(value);
				} else {
					sb.append("&").append(key).append("=").append(value);
				}
			}
			return sb.toString();
		}
	}

	public static InputStream doPost(String urlStr, Map<String, Object> paramMap) throws Exception {
		URL url = new URL(urlStr);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestMethod(POST);
		String paramStr = prepareParam(paramMap);
		conn.setDoInput(true);
		conn.setDoOutput(true);
		OutputStream os = conn.getOutputStream();
		os.write(paramStr.toString().getBytes("utf-8"));
		os.close();

		return conn.getInputStream();
	}

	public static InputStream doGet(String urlStr, Map<String, Object> paramMap) throws Exception {
		String paramStr = prepareParam(paramMap);
		if (paramStr != null && paramStr.trim().length() > 0) {
			urlStr += "?" + paramStr;
		}
		URL url = new URL(urlStr);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestMethod(GET);
		conn.setRequestProperty("Content-Type", "text/html; charset=UTF-8");

		conn.connect();
		return conn.getInputStream();
	}

	public static InputStream doPut(String urlStr, Map<String, Object> paramMap) throws Exception {
		URL url = new URL(urlStr);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestMethod(PUT);
		String paramStr = prepareParam(paramMap);
		conn.setDoInput(true);
		conn.setDoOutput(true);
		OutputStream os = conn.getOutputStream();
		os.write(paramStr.toString().getBytes("utf-8"));
		os.close();
		return conn.getInputStream();
	}

	public static void doDelete(String urlStr, Map<String, Object> paramMap) throws Exception {
		String paramStr = prepareParam(paramMap);
		if (paramStr != null && paramStr.trim().length() > 0) {
			urlStr += "?" + paramStr;
		}
		URL url = new URL(urlStr);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setDoOutput(true);
		conn.setRequestMethod(DELETE);
		// shielding of code is wrong ,java.net.ProtocolException: HTTP method
		// DELETE doesn't support output
		/*
		 * OutputStream os = conn.getOutputStream();
		 * os.write(paramStr.toString().getBytes("utf-8")); os.close();
		 */
		if (conn.getResponseCode() == 200) {
			Log.i(TAG, "doDelete() success");
		} else {
			Log.i(TAG, conn.getResponseCode() + "");
		}
	}

}

附送一个简单的流变字符串工具类

package com.example.demo.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.util.Log;

public class StreamUtil {

	private static final String TAG = "StreamUtil";

	public static String inputStreamToString(InputStream inputStream) {
		BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
		String result = "";
		try {
			String line;
			while ((line = br.readLine()) != null) {
				result += "/n" + line;
			}
			br.close();
			result = result.substring("/n".length());
		} catch (IOException e) {
			e.printStackTrace();
		}
		Log.i(TAG, "inputStreamToString() result:" + result);
		return result;
	}
}

完成!

 

2014-08-4-04 改进一下

public class HttpClient {

	private static final String TAG = "HttpClient";

	public static final String GET = "GET";
	public static final String POST = "POST";
	public static final String UTF_8 = "UTF-8";
	public static final String httpStatusCode = "httpStatusCode";
	public static final int ConnectTimeout = 30 * 1000;
	public static final int ReadTimeout = 30 * 1000;

	public static String post(String reqURL, Map<String, String> params)
			throws Exception {
		HttpURLConnection conn = null;
		OutputStream out = null;
		InputStream in = null;
		try {
			URL url = new URL(reqURL);
			conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod(POST);
			conn.setDoInput(true);
			conn.setDoOutput(true);
			conn.setConnectTimeout(ConnectTimeout);
			conn.setReadTimeout(ReadTimeout);

			byte[] data = convertParams(params).getBytes(UTF_8);
			if (data.length > 0) {
				out = conn.getOutputStream();
				out.write(data);
				out.flush(); // 清空缓冲区,发送数据
			}

			int tatusCode = conn.getResponseCode();
			if (tatusCode == 200) {
				in = conn.getInputStream();
				return Utils.inputStreamToString(in);
			} else {
				return httpStatusCode + tatusCode;
			}
		} catch (Exception e) {
			Log.i(TAG, e.getMessage());
			throw new Exception("HttpClient post Exception");
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (in != null) {
				try {
					in.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				conn.disconnect();
				conn = null;
			}
		}
	}

	public static String get(String reqURL, Map<String, String> params)
			throws Exception {
		HttpURLConnection conn = null;
		OutputStream out = null;
		InputStream in = null;
		try {
			String data = convertParams(params);
			if (data.length() > 0)
				reqURL = reqURL + "?" + data;
			URL url = new URL(reqURL);
			conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod(GET);
			conn.setRequestProperty("Content-Type", "text/html; charset="
					+ UTF_8);
			conn.setConnectTimeout(ConnectTimeout);
			conn.setReadTimeout(ReadTimeout);

			conn.connect();

			int statusCode = conn.getResponseCode();
			if (statusCode == 200) {
				in = conn.getInputStream();
				return Utils.inputStreamToString(in);
			} else {
				return httpStatusCode + statusCode;
			}
		} catch (Exception e) {
			Log.i(TAG, e.getMessage());
			throw new Exception("HttpClient get Exception");
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (in != null) {
				try {
					in.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				conn.disconnect();
				conn = null;
			}
		}
	}

	private static String convertParams(Map<String, String> params) {
		if (params == null || params.isEmpty())
			return "";
		StringBuffer sb = new StringBuffer();
		for (String key : params.keySet()) {
			if (sb.length() > 1)
				sb.append("&");
			sb.append(key).append("=").append(params.get(key));
		}
		return sb.toString();
	}

}

 


2014-12-11 封装成自己的一个联网框架。 也许有些问题 ,高手帮忙看看


/**
 * @author wangpeng
 * 
 */
public class HttpClient {

	private static final String TAG = HttpClient.class.getSimpleName();

	public static final String GET = "GET";
	public static final String POST = "POST";
	public static final String UTF_8 = "UTF-8";
	public static final String httpStatusCode = "httpStatusCode";
	public static final int ConnectTimeout = 20 * 1000;
	public static final int ReadTimeout = 20 * 1000;

	public static String post(String reqURL, Map<String, String> params) {
		HttpURLConnection conn = null;
		BufferedOutputStream out = null;
		BufferedInputStream in = null;
		try {
			URL url = new URL(reqURL);
			conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod(POST);
			conn.setDoInput(true);
			conn.setDoOutput(true);
			conn.setConnectTimeout(ConnectTimeout);
			conn.setReadTimeout(ReadTimeout);

			byte[] data = convertParams(params).getBytes(UTF_8);
			if (data.length > 0) {
				out = new BufferedOutputStream(conn.getOutputStream(), 8 * 1024);
				out.write(data);
				out.flush(); // clear cache, send data
			}

			int statusCode = conn.getResponseCode();
			if (statusCode == 200) {
				in = new BufferedInputStream(conn.getInputStream(), 8 * 1024);
				return BaseUtils.inputStreamToString(in);
			} else {
				return httpStatusCode + statusCode;
			}
		} catch (Exception e) {
			Log.i(TAG, e.getMessage());
			throw new RuntimeException("HttpClient post Exception");
		} finally {
			if (conn != null)
				conn.disconnect();
			try {
				if (in != null)
					in.close();
				if (out != null)
					out.close();
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
	}

	public static String get(String reqURL, Map<String, String> params) {
		HttpURLConnection conn = null;
		BufferedInputStream in = null;
		try {
			String data = convertParams(params);
			if (data.length() > 0)
				reqURL = reqURL + "?" + data;
			URL url = new URL(reqURL);
			conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod(GET);
			conn.setRequestProperty("Content-Type", "text/html; charset="
					+ UTF_8);
			conn.setConnectTimeout(ConnectTimeout);
			conn.setReadTimeout(ReadTimeout);

			conn.connect();

			int statusCode = conn.getResponseCode();
			if (statusCode == 200) {
				in = new BufferedInputStream(conn.getInputStream(), 8 * 1024);
				return BaseUtils.inputStreamToString(in);
			} else {
				return httpStatusCode + statusCode;
			}
		} catch (Exception e) {
			Log.i(TAG, e.getMessage());
			throw new RuntimeException("HttpClient get Exception");
		} finally {
			if (conn != null)
				conn.disconnect();
			try {
				if (in != null)
					in.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	private static String convertParams(Map<String, String> params) {
		if (params == null || params.isEmpty())
			return "";
		StringBuffer sb = new StringBuffer();
		for (String key : params.keySet()) {
			if (sb.length() > 1)
				sb.append("&");
			sb.append(key).append("=").append(params.get(key));
		}
		return sb.toString();
	}

}
/**
 * @author wangpeng
 */
public class HttpManager {

	private Activity activity;
	private ExecutorService executor;

	public HttpManager(final Activity activity) {
		this.activity = activity;
		this.executor = Executors.newSingleThreadExecutor();
	}

	public void request(final String method, final String url,
			final Map<String, String> params, final Listener listener,
			final ErrorListener errorListener, final boolean useDiskCache) {
		LogUtils.logd("request:\n" + "url:" + url + ",params:" + params);
		executor.execute(new Runnable() {
			@Override
			public void run() {
				try {
					if (useDiskCache) {
						final InputStream in = DiskLruCacheUtils.get(activity,
								DiskLruCacheUtils.object, url + params);

						if (in != null) {
							activity.runOnUiThread(new Runnable() {
								@Override
								public void run() {
									String cacheResult = BaseUtils
											.inputStreamToString(in);
									listener.onResponse(cacheResult);
								}
							});
						}
					}

					final String result = method.equals(HttpClient.POST) ? HttpClient
							.post(url, params) : HttpClient.get(url, params);
					// receive success
					if (!result.contains(HttpClient.httpStatusCode)) {
						activity.runOnUiThread(new Runnable() {
							@Override
							public void run() {
								LogUtils.logd("response:\n" + result);
								listener.onResponse(result);
							}
						});

						if (useDiskCache)
							DiskLruCacheUtils
									.save(activity,
											DiskLruCacheUtils.object,
											url + params,
											new ByteArrayInputStream(result
													.getBytes()));
					} else {
						activity.runOnUiThread(new Runnable() {
							@Override
							public void run() {
								LogUtils.loge("http error for service [url:" + url
										+ ",params:" + params + "]");
								errorListener.onError();
							}
						});

					}
				} catch (Exception e) {
					activity.runOnUiThread(new Runnable() {
						@Override
						public void run() {
							LogUtils.loge("http error for net [url:" + url
									+ ",params:" + params + "]");
							errorListener.onError();
						}
					});
				}
			}
		});
	}

	public void stop() {
		shutdownAndAwaitTermination();
	}

	public interface Listener {
		void onResponse(String response);
	}

	public interface ErrorListener {
		void onError();
	}

	private void shutdownAndAwaitTermination() {
		// Disable new tasks from being submitted
		executor.shutdown();
		try {
			// Wait a while for existing tasks to terminate
			if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
				executor.shutdownNow(); // Cancel currently executing tasks
				// Wait a while for tasks to respond to being cancelled
				if (!executor.awaitTermination(60, TimeUnit.SECONDS))
					System.err.println("Pool did not terminate");
			}
		} catch (InterruptedException ie) {
			// (Re-)Cancel if current thread also interrupted
			executor.shutdownNow();
			// Preserve interrupt status
			Thread.currentThread().interrupt();
		}
	}
}

/**
 * @author wangpeng
 */
public class HttpUtils {

	public boolean useDiskCahce = true;

	private Activity activity;
	private ErrorListener errorListener;

	private HttpUtils() {
	}

	public static HttpUtils init(Activity activity, ErrorListener errorListener) {
		HttpUtils httpUtils = new HttpUtils();
		httpUtils.activity = activity;
		httpUtils.errorListener = errorListener;
		return httpUtils;
	}
	
	public void post(String url, final Map<String, String> params,
			final Listener listener) {
		if (activity == null) {
			throw new IllegalArgumentException(
					"activity has not init in http utils");
		}

		HttpManager manager = new HttpManager(activity);

		manager.request(HttpClient.POST, url, params, listener, errorListener,
				useDiskCahce);
	}

	public void get(String url, final Map<String, String> params,
			final Listener listener) {
		if (activity == null) {
			throw new IllegalArgumentException(
					"activity has not init in http utils");
		}

		HttpManager manager = new HttpManager(activity);

		manager.request(HttpClient.GET, url, params, listener, errorListener,
				useDiskCahce);
	}
}


使用方法:活动里面

HttpUtils httpUtils = HttpUtils.init(this, this); (@1)

String a= "http://www.baidu.com";

Map<String, String> params = BaseUtils.initMap("key1","value1","key2", value2);

httpUtils.post(a, params, new Listener() {
@Override
public void onResponse(String response) {
text.setText(response);
}
});

这样就可以了。先秒返回一次缓存(上次查询的数据),过几秒再返回一次联网查询数据。

@1 这行代码建议在BaseActivity里面初始化,BaseActivity可以统一实现联网失败回调.


缓存工具类 参考 郭林哥的。 http://blog.csdn.net/guolin_blog/article/details/28863651



最后补充本人一直使用的BaseUtils。

package com.example.f.demo.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import android.graphics.Bitmap;
import android.os.Environment;

public class BaseUtils {
	/**
	 * 根据传入参数,以key对应value的形式初始化一个hashmap对象
	 * 
	 * @param <T>
	 */
	public static Map<String, String> initMap(Object... params) {
		if (params == null || params.length < 1 || params.length % 2 != 0)
			return null;
		Map<String, String> map = new HashMap<String, String>();
		for (int i = 0; i < params.length; i = i + 2)
			map.put(String.valueOf(params[i]), String.valueOf(params[i + 1]));
		return map;
	}

	public static boolean hasSDCard() {
		return Environment.MEDIA_MOUNTED.equals(Environment
				.getExternalStorageState());
	}

	public static String inputStreamToString(InputStream in) {
		StringBuffer out = new StringBuffer();
		byte[] b = new byte[8 * 1024];
		try {
			for (int n; (n = in.read(b)) != -1;) {
				out.append(new String(b, 0, n));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return out.toString();
	}

	public static boolean inputStreamToOutputStream(InputStream input,
			OutputStream output) {
		BufferedOutputStream out = null;
		BufferedInputStream in = null;
		in = new BufferedInputStream(input, 8 * 1024);
		out = new BufferedOutputStream(output, 8 * 1024);
		int b;
		try {
			while ((b = in.read()) != -1) {
				out.write(b);
			}
			return true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (out != null)
					out.close();
				if (in != null)
					in.close();
			} catch (final IOException e) {
				e.printStackTrace();
			}
		}
		return false;
	}

	public static InputStream bitmapToInputStream(Bitmap bitmap) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
		InputStream sbs = new ByteArrayInputStream(baos.toByteArray());
		return sbs;
	}

	public static InputStream byteToInputStream(byte[] bytes) {
		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
		return bais;
	}

}

抱歉!评论已关闭.