編輯:關於Android編程
Android是作為智能手機的操作系統,我們開發的應用,大多數也都需要連接網絡,通過網絡發送數據、獲取數據,因此作為一個應用開發者必須熟悉怎麼進行網絡訪問與連接。通常android中進行網絡連接一般是使用scoket或者http,http是最多的情況,這裡,我來總結下,怎麼進行http網絡訪問操作。
android是采用java語言進行開發的,android的包中包含java的URLConnection和apache 的httpclient,因此我們可以使用這兩個工具進行網絡連接和操作。同時,為了控制是否允許程序連接網絡,我們開發應用時,需要在Manifest文件中配置申請網絡連接的權限,代碼如下。
URLConnection為java.net包中提供的網絡訪問,支持http,https,ftp等,進行http連接時,使用HttpURLConnection即可,示例代碼如下:
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in); //該方法是我們自己寫的,從流中取數據保存到本地,實現從網絡獲取數據。
finally {
urlConnection.disconnect();
}
向服務器提交數據時,需要采用POST傳輸
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
urlConnection.setDoOutput(true); //設置可以上傳數據
urlConnection.setChunkedStreamingMode(0);
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
writeStream(out); //該方法時我們自己寫的,向輸出流中寫數據,實現數據上傳。
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
finally {
urlConnection.disconnect();
}
更多使用方法和函數請查看:http://developer.android.com/reference/java/net/HttpURLConnection.html
同時HttpsURLConnection的使用方法請查看:http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
這個呢,我們也可以使用AndroidHttpClient頁可以使用apache默認的DeafultHttpClient,兩者之間僅僅常見Client不同,其他都一樣
創建AndroidHttpClient
AndroidHttpClient httpClient = AndroidHttpClient.newInstance("user-agent");
創建DefaultHttpClient
HttpClient client = new DefaultHttpClient();
GET請求
HttpGet getRequest = new HttpGet("http://blog.isming.me");
try {
HttpResponse response = httpClient.execute(getMethod); //發起GET請求
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取服務器響應內容
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
發起POST請求:
//先將要傳的數據放入List
params = new LinkedList();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二個參數"));
try {
HttpPost postMethod = new HttpPost(baseUrl);
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
HttpResponse response = httpClient.execute(postMethod); //執行POST方法
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
從上面看到,使用HttpClient更加方便,明了。不過Android官方給我們的文檔說明是建議android2.2及以下版本建議使用HttpClient,android2.3及以上版本建議使用HttpURLConnection。
原因是HttpURLConnection時一個輕量級的Http客戶端,提供的API比較簡單,方便擴展,但是在2.2及以前版本中,這個API存在一些bug,在2.3的版本中,給修改了。
而HttpClient雖然穩定,bug少,但是其提供的API很多,進行升級和擴展不方便,android團隊在提升和優化其方面的積極性不高。
因此,在Android2.2版本以前,使用HttpClient時最好的選擇。
Android2.3版本及以後,使用HttpURLConnection時最佳選擇。
網絡連接是耗時的操作,通常我們不會將其放在UI線程操作,會編寫異步線程,將其放在後台線程執行(異步線程操作看這裡)。
而網上有一些線程的網絡操作框架,可以減少我們的工作量,同時我們自己寫的好,可能很多異常處理之類的,沒有其向的更加全面。
有輕量的android-async-http
谷歌官方的volley
Square提供的Retrofit
這個可以根據自己項目的需要選擇不同的框架,有空我來寫寫volley的使用(PS:網上已經有使用方法了,自己百度去
),另外兩個我的連接中已經有使用方法了。
ok,完成!
寫的東西不少,但是介紹的不夠詳細。如果不清楚的,歡迎與我交流
AndroidApp上架所需文件上架准備App文件:1.安裝包2.應用商標:圖片格式PNG,大小512*512,小於800KB。3.應用截圖(4~6張):圖片格式JPG或
關於實現網易新聞客戶端的界面,以前寫過很多博客,請參考:Android實現網易新聞客戶端效果Android實現網易新聞客戶端側滑菜單(一)Android實現網易新聞客戶端
開學到現在一直都在學著去搞明白一個簡單的游戲。寫完代碼之後,發現主界面顯示的某些圖片比正常的大了許多。本來以為是代碼寫錯了,反反復復,來來回回的檢查代碼,真心沒有錯誤。。
概述隨著移動互聯網的快速發展,各種移動應用也層出不窮,在追求產品功能強大的同時,對界面的顯示效果也越來越苛刻。動畫已經成為了各種APP的重要組成部分,成為交互中不可分割的