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