深入Android通过Apache HTTP访问HTTP资源(二)(转)
(2012-02-20 14:48:10)转自:http://blog.csdn.net/jiahui524/article/details/6881006
三步曲:
1.
2.
3.
帖上一部分源代码:
Java代码:
-
private String request(String method, String url) { -
HttpResponse httpResponse = null; -
StringBuffer result = new StringBuffer(); -
try { -
if (method.equals("GET")) { -
// 1.通过url创建HttpGet对象 -
HttpGet httpGet = new HttpGet(url); -
// 2.通过DefaultClient的excute方法执行返回一个HttpResponse对象 -
HttpClient httpClient = new DefaultHttpClient(); -
httpResponse = httpClient.execute(httpGet); -
// 3.取得相关信息 -
// 取得HttpEntiy -
HttpEntity httpEntity = httpResponse.getEntity(); -
// 得到一些数据 -
// 通过EntityUtils并指定编码方式取到返回的数据 -
result.append(EntityUtils.toString(httpEntity, "utf-8")); -
//得到StatusLine接口对象 -
StatusLine statusLine = httpResponse.getStatusLine(); -
//得到协议 -
result.append("协议:" + statusLine.getProtocolVersion() + "\r\n"); -
int statusCode = statusLine.getStatusCode(); -
result.append("状态码:" + statusCode + "\r\n"); -
} else if (method.equals("POST")) { -
// 1.通过url创建HttpGet对象 -
HttpPost httpPost = new HttpPost(url); -
// 2.通过DefaultClient的excute方法执行返回一个HttpResponse对象 -
HttpClient httpClient = new DefaultHttpClient(); -
httpResponse = httpClient.execute(httpPost); -
// 3.取得相关信息 -
// 取得HttpEntiy -
HttpEntity httpEntity = httpResponse.getEntity(); -
// 得到一些数据 -
// 通过EntityUtils并指定编码方式取到返回的数据 -
result.append(EntityUtils.toString(httpEntity, "utf-8")); -
StatusLine statusLine = httpResponse.getStatusLine(); -
statusLine.getProtocolVersion(); -
int statusCode = statusLine.getStatusCode(); -
result.append("状态码:" + statusCode + "\r\n"); -
} -
} catch (Exception e) { -
Toast.makeText(HTTPDemoActivity.this, "网络连接异常", Toast.LENGTH_LONG).show(); -
} -
return result.toString(); -
} -
-
public void getImage(String url) { -
try { -
// 1.通过url创建HttpGet对象 -
HttpGet httpGet = new HttpGet(url); -
// 2.通过DefaultClient的excute方法执行返回一个HttpResponse对象 -
HttpClient httpClient = new DefaultHttpClient(); -
HttpResponse httpResponse = httpClient.execute(httpGet); -
// 3.取得相关信息 -
// 取得HttpEntiy -
HttpEntity httpEntity = httpResponse.getEntity(); -
// 4.通过HttpEntiy.getContent得到一个输入流 -
InputStream inputStream = httpEntity.getContent(); -
System.out.println(inputStream.available()); -
//通过传入的流再通过Bitmap工厂创建一个Bitmap -
Bitmap bitmap = BitmapFactory.decodeStream(inputStream); -
//设置imageView -
imageView.setImageBitmap(bitmap); -
} catch (Exception e) { -
Toast.makeText(HTTPDemoActivity.this, "网络连接异常", Toast.LENGTH_LONG) -
.show(); -
} -
} - }
开发注意事项:
1.要想访问本地机器不能写成localhost或者127.0.0.1要写成10.0.2.2。这是因为Android模拟器(simulator)把它自己作为了localhost,也就是说,代码中使用localhost或者127.0.0.1来访问,都是访问模拟器自己!若你想在模拟器simulator上面访问你的电脑,那么就使用android内置的IP: 10.0.2.2,10.0.2.2是模拟器设定的特定ip,是你电脑的别名,在模拟器上用10.0.2.2就能成功访问你的电脑本机。
2.记得加上网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>