Android使用HttpClient完成Post和Get方式的联网请求

Android联网可以采用HttpPost,HttpGet封装post请求和get请求,再使用HttpClient的excute方法发送post或者get请求并返回服务器的响应数据。

1、设置连接和读取超时时间,并新建HttpClient对象:

// 设置连接超时时间和数据读取超时时间 HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, 30000); HttpConnectionParams.setSoTimeout(httpParams, 30000); //新建HttpClient对象 HttpClient httpClient = new DefaultHttpClient(httpParams);

2、Get请求:

HttpPost post = new HttpPost(KeySource.HOST_URL_STR); // set HTTP head parameters Map<String, String> headers = heads; Set<String> setHead = headers.keySet(); Iterator<String> iteratorHead = setHead.iterator(); while (iteratorHead.hasNext()) { String headName = iteratorHead.next(); String headValue = (String) headers.get(headName); post.setHeader(headName, headValue); } /** * 通常的HTTP实体需要在执行上下文的时候动态生成的。 * HttpClient的提供使用EntityTemplate实体类和 ContentProducer接口支持动态实体。 * 内容制作是通过写需求的内容到一个输出流,每次请求的时候都会产生。 * 因此,通过EntityTemplate 创建实体通常是独立的,重复性好。 */ ontentProducer cp = new ContentProducer() { public void writeTo(OutputStream outstream) throws IOException { Writer writer = new OutputStreamWriter(outstream, "UTF-8"); writer.write(requestBody); writer.flush(); writer.close(); } }; HttpEntity entity = new EntityTemplate(cp); post.setEntity(entity); } //执行connect ,需要try ,catch处理 response = httpClient.execute(post);

3、Post请求:

HttpPost post = new HttpPost(KeySource.HOST_URL_STR); // set HTTP head parameters Map<String, String> headers = heads; Set<String> setHead = headers.keySet(); Iterator<String> iteratorHead = setHead.iterator(); while (iteratorHead.hasNext()) { String headName = iteratorHead.next(); String headValue = (String) headers.get(headName); post.setHeader(headName, headValue); } /** * 通常的HTTP实体需要在执行上下文的时候动态生成的。 * HttpClient的提供使用EntityTemplate实体类和ContentProducer接口支持动态实体。 * 内容制作是通过写需求的内容到一个输出流,每次请求的时候都会产生。 * 因此,通过EntityTemplate创建实体通常是独立的,重复性好。 */ ContentProducer cp = new ContentProducer() { public void writeTo(OutputStream outstream) throws IOException { Writer writer = new OutputStreamWriter(outstream, "UTF-8"); writer.write(requestBody); writer.flush(); writer.close(); } }; HttpEntity entity = new EntityTemplate(cp); post.setEntity(entity); } //connect ,need try catch response = httpClient.execute(post);

4、请求Response响应处理:

if (response.getStatusLine().getStatusCode() == 200) { // get response xml. /** * 因为直接调用toString可能会导致某些中文字符出现乱码的情况。所以此处使用toByteArray * 如果需要转成String对象,可以先调用EntityUtils.toByteArray()方法将消息实体转成byte数组, * 在由new String(byte[] bArray)转换成字符串。 */ byte[] bResultXml = EntityUtils.toByteArray(response .getEntity()); if (bResultXml != null) { String strXml = new String(bResultXml, "utf-8"); } } //Todo xmlAnalysis..

你可能感兴趣的:(android,String,服务器,url,Parameters,byte)