android 应用的网络请求工具
- - ITeye博客 Android应用开发中一般会用到访问网络请求,可以使用socket,webservice等. 这里我只是用java中URL,传送数据方式采用json,不考虑数据加密问题. 封装的工具类很简单,只提供post,get方法. 由于androidUI主线程中不允许启动线程,这里使用FutrueTask启动线程获得返回结果.
Android应用开发中一般会用到访问网络请求,可以使用socket,webservice等。这里我只是用java中URL,传送数据方式采用json,不考虑数据加密问题。封装的工具类很简单,只提供post,get方法。由于androidUI主线程中不允许启动线程,这里使用FutrueTask启动线程获得返回结果。代码如下:
public class HttpUtil { /** * get方式访问服务器 * @param url * @param params * @return * @throws Exception */ public static String get(final String url, final Map<String, Object> params)throws Exception{ String r = null; FutureTask<String> task = new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { BufferedReader bufferedReader = null; String result = null; try { String getUrl = url + "?" + getParams(params); Log.i("ApplicationTest", getUrl); URL realUrl = new URL(getUrl); URLConnection connection = realUrl.openConnection(); connection.connect(); bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line = null; StringBuffer sb = new StringBuffer(); while((line = bufferedReader.readLine())!=null){ sb.append(line); } result = sb.toString(); } catch (IOException e) { Log.i("ApplicationTest", "xxxxx1"); e.printStackTrace(); throw e; }finally { if(bufferedReader != null){ try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } }); new Thread(task).start(); try { r = task.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return r; } /** * post方式访问服务器 * @param url * @param params * @return * @throws Exception */ public static String post(final String url, final Map<String, Object> params)throws Exception{ String r = null; FutureTask<String> task = new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { String result = null; BufferedReader bufferedReader = null; PrintWriter out = null; try { String getUrl = url; URL realUrl = new URL(getUrl); URLConnection connection = realUrl.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); out = new PrintWriter(connection.getOutputStream()); out.print(getParams(params)); out.flush(); bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line = null; StringBuffer sb = new StringBuffer(); while((line = bufferedReader.readLine())!=null){ sb.append(line); } result = sb.toString(); } catch (IOException e) { e.printStackTrace(); throw e; }finally { if(bufferedReader != null){ try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } }); new Thread(task).start(); try { r = task.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return r; } /** * 组装请求参数 * @param params * @return */ private static String getParams(Map<String, Object> params){ StringBuffer sb = new StringBuffer(); if(params != null){ for(String key : params.keySet()){ sb.append(key).append("=").append(params.get(key).toString()).append("&"); } if(sb.indexOf("&") == sb.length()-1){ sb.deleteCharAt(sb.length()-1); } } return sb.toString(); } }
如果使用HttpClient工具包,代码会更简单。这里就不列出。