直接po代碼吧,第一個是一個枚舉類型的類,是四種rest http請求,get/post/put/delete:網絡
public enum HttpRequestMethod { HttpGet { @Override public HttpUriRequest createRequest(String url) { return new HttpGet(url); } }, HttpPost { @Override public HttpUriRequest createRequest(String url) { return new HttpPost(url); } }, HttpPut { @Override public HttpUriRequest createRequest(String url) { return new HttpPut(url); } }, HttpDelete { @Override public HttpUriRequest createRequest(String url) { return new HttpDelete(url); } }; public HttpUriRequest createRequest(String url) { return null; } }
接下來是一個HttpUtil類,做用是能夠指定http請求類型、訪問的url和帶的參數:多線程
public class HttpUtil { private static final String DEFAULT_LOCAL_ENCODE = "UTF-8"; private static final String DEFAULT_REMOTE_ENCODE = "UTF-8"; private static final int HTTP_200 = 200; public static HttpClient httpClient = new DefaultHttpClient(); static { httpClient.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT, Integer.valueOf(5000)); httpClient.getParams().setParameter(HttpConnectionParams.CONNECTION_TIMEOUT, Integer.valueOf(3000)); } public static final String BASE_URL = "localhost:8080/demo/login"; public static String sendRequest(HttpRequestMethod requestMethod, String url,final Map<String ,String> params) throws Exception { final HttpUriRequest request = requestMethod.createRequest(url); if(params != null) { ((HttpEntityEnclosingRequest)request).setEntity( new UrlEncodedFormEntity(MapToPair(params), DEFAULT_REMOTE_ENCODE)); } FutureTask<String> task = new FutureTask<String>( new Callable<String>() { @Override public String call() throws Exception { HttpResponse response = httpClient.execute(request); if(response.getStatusLine().getStatusCode() == HTTP_200) { return EntityUtils.toString(response.getEntity(), DEFAULT_LOCAL_ENCODE); } return "訪問失敗"; } } ); new Thread(task).start(); return task.get(); } static List<NameValuePair> MapToPair(Map<String, String> map) { final List<NameValuePair> pairList = new ArrayList<NameValuePair>(); for (String key : map.keySet()){ pairList.add(new BasicNameValuePair(key, map.get(key))); } return pairList; } }
裏面用到了跟多線程有關的FutureTask類,不是很瞭解先用着,感受多線程、併發相關的東西仍是挺多的並且很重要,這裏使用多線程是由於可能會有IO阻塞,這樣會致使主界面掛掉。併發
回想一下,在移動應用程序中,長時間的操做(如網絡、文件或長的計算)不該該在主系統線程上完成。相反,應在一個單獨的工做線程中執行它們。阻塞系統線程會對應用程序的用戶界面的響應能力產生負面影響,有可能致使強行關閉您的應用程序。socket
調用的話很簡單,只須要:ide
HttpUtil.sendRequest(HttpRequestMethod.HttpPost, url, map);
其中map是一個HashMap<String, String>類型的。post
大功告成~雖然很簡單,可是畢竟第一次寫,學習到很多,固然也想知道HttpClient底層是如何實現的,確定是封裝了socket可是內部必定有一些頗有意思的東西。學習
另外,關於TCP/IP也是水深的能夠,接下來要作聊天了,稍微瞭解了一下長鏈接和短連接,以及心跳機制和輪詢機制,之後會慢慢都寫到博客。url