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();