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

来源:互联网 发布:ubuntu设置断电自启动 编辑:程序博客网 时间:2024/05/18 00:31


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


/** * 参考 [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() {@Overridepublic void run() {try {if (useDiskCache) {final InputStream in = DiskLruCacheUtils.get(activity,DiskLruCacheUtils.object, url + params);if (in != null) {activity.runOnUiThread(new Runnable() {@Overridepublic 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 successif (!result.contains(HttpClient.httpStatusCode)) {activity.runOnUiThread(new Runnable() {@Overridepublic 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() {@Overridepublic void run() {LogUtils.loge("http error for service [url:" + url+ ",params:" + params + "]");errorListener.onError();}});}} catch (Exception e) {activity.runOnUiThread(new Runnable() {@Overridepublic 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 submittedexecutor.shutdown();try {// Wait a while for existing tasks to terminateif (!executor.awaitTermination(60, TimeUnit.SECONDS)) {executor.shutdownNow(); // Cancel currently executing tasks// Wait a while for tasks to respond to being cancelledif (!executor.awaitTermination(60, TimeUnit.SECONDS))System.err.println("Pool did not terminate");}} catch (InterruptedException ie) {// (Re-)Cancel if current thread also interruptedexecutor.shutdownNow();// Preserve interrupt statusThread.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;}}


0 0
原创粉丝点击