android客戶端與服務端交互的工具類
客戶端:
public class HttpUtil { //創建HttpClient對象 public static HttpClient httpClient = new DefaultHttpClient(); public static final String BASE_URL="http://xxx.xxxx.xx.xx:8080/ticket/"; // public static final String BASE_URL="http://xxx.xxxx.xx.xx:8080/apk/"; // public static final String BASE_URL = "www.baidu.com"; /** * * @param url 發送請求的Url * @return 服務器響應的字符串 * @throws Exception * @throws InterruptedException */ public static String getRequest(final String url) throws Exception { FutureTask<String> task = new FutureTask<String>( new Callable<String>() { @Override public String call() throws Exception { //創建HttpGet對象 HttpGet get = new HttpGet(url); //發送GET請求 HttpResponse response = httpClient.execute(get); //若是服務器響應成功 if(response.getStatusLine(). getStatusCode() == 200) { //獲取服務器響應的字符串 String result = EntityUtils. toString(response.getEntity()); return result; } return null; } } ); new Thread(task).start(); return task.get(); } /** * * @param url 發送請求的url * @param rawParams 請求參數 * @return 響應的字符串 * @throws Exception */ public static String postRequest(final String url, final Map<String,String> rawParams) throws Exception { // ExecutorService exec=Executors.newCachedThreadPool(); // FutureTask<String> task = new FutureTask<String>( // new Callable<String>() { // @Override // public String call() throws Exception { //創建HttpPost對象 HttpPost post = new HttpPost(new URI(url)); //對較多的傳遞參數進行封裝、 List<NameValuePair> params = new ArrayList<NameValuePair>(); for(String key : rawParams.keySet()) { //封裝請求參數 params.add(new BasicNameValuePair(key, rawParams.get(key))); } //設置請求參數 post.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8)); //發送post請求 HttpResponse response = httpClient.execute(post); //若是服務器響應成功 if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ //獲取服務器響應的字符串 String result = EntityUtils.toString(response.getEntity(),HTTP.UTF_8); return result; }else{ return "-1"; } } // } // ); // new Thread(task).start(); // return task.get(); // } }
注意:連接本地服務器時,最好使用ipv4地址而不是localhost。
服務端:
寫一個servlet接收,判斷客戶端發送的是什么請求uri
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String uri = request.getRequestURI(); uri = uri.substring(uri.lastIndexOf("/")); System.out.println("uri: " + uri); if("/hotStation.do".equals(uri)) { doHotStationList(request, response); } if("/stationList.do".equals(uri)) { doStationList(request, response); } }
如doHotStationList是這樣寫的:
public void doHotStationList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); List<String> hotStationList = StationService.getHostStationList(); JSONArray jsonArray = JSONArray.fromObject(hotStationList); System.out.println("傳給客戶端:" + jsonArray.toString()); response.getWriter().println(jsonArray.toString()); }
我這里數據交互使用的是json.
客戶端獲取服務端傳遞過來的json數據再解析成pojo對象即可。
本文由用戶 n7w77 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!