android客戶端與服務端交互的工具類

n7w77 9年前發布 | 3K 次閱讀 Java 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!