http是一个可靠的传输,建立在TCP/IP连接之上,缺省端口是80,其他端口号也可以用。Android可以用HttpURLConnection或HttpClient接口来开发http程序。
http通信使用最多的是Get和Post。Post和Get的不同之处在于Get的参数放在URL字串中,而Post的参数放在http请求数据中。
HttpURLConnection继承自URLConnection,都是抽象类,无法直接实例化对象。其对象主要通过URL的openConnection方法获得。
openConnection方法只创建URLConnection或HttpURLConnection实例,但是不进行真正的连接操作,并且每次openConnection都创建一个新的实例。
在连接之前,可以设置一些属性,比如超时时间等。
HttpURLConnection默认使用Get方法,如果要使用Post方法,则需要使用setRequestMethod方法。
// 示例代码:通过Post方式发送请求
URL url = new URL(“http://www.google.com”);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置输入/出流
conn.setDoOutput(true);
conn.setDoInput(true);
// 设置请求方式为Post
conn.setRequestMethod(“POST”);
// Post请求不能使用缓存
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
// 设置Content-type
conn.setRequestProperty(“Content-Type”,“application/x-www-form-urlencoded”);
// 在调用getOutputStream时会隐式调用conn.connect()
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
String content = “name=” + URLEncoder.encode(“Jake”,“gb2312”);
dos.writeBytes(content);
dos.flush();
dos.close();
// 连接完成之后可以关闭这个连接
conn.disconnect();
// 示例代码:读取网页上的内容
InputStreamReader isr = new InputStreamReader(conn.getInputStream());
BufferedReader br = new BufferedReader(isr);
String line = null;
while(((line = br.readLine()) != null)) { … }
// 关闭连接
isr.close();
conn.disconnect();
// 示例代码:获取网络上的一张图片
…
conn.setDoInput(true);
conn.connect(); // 这条语句要不(待定)
InputStream is = conn.getInputStream();
// 将InputStream数据转换成Bitmap
Bitmap bitmap = BitmapFactory.decodeStream(is);
// 关闭数据流
is.close();