編輯:關於Android編程
手機本身是作為手機終端使用的,因此它的計算能力,存儲能力都是有限的。它的主要優勢是攜帶方便,可以隨時打開,而且手機通常總是處於聯網狀態。因此網絡支持對於手機應用非常重要。
Android完全支持JDK本身的TCP,UDP網絡通信API,也可以使用ServerSocket,Socket來建立基於TCP/IP協議的網絡通信,也可以使用DatagramSocket,Datagrampacket來建立基於UDP協議的網絡通信。
Android也支持JDK提供的URL,URLConnection等網絡通信API。
Android還內置了HttpClient,和HttpUrlConnection這樣可以非常方便地發送HTTP請求,並獲取Http響應。
——基於TCP協議的編程
使用Socket,ServerSocket編程:
使用多線程,handler機制完成網絡編程.
注意:由於手機無線上網的IP地址通常都是由移動運營公司動態分配的,一般不會有自己固定的IP地址,因此很少在手機上運行服務器端,服務器端通常運行在有固定IP的服務器上。
①跟網絡有關的就要加Internet權限
②網絡數據的請求要在子線程中進行
③更新UI需要借助Handler機制
④編碼問題:Android默認編碼為UTF-8 Java默認編碼為GB2312
⑤本機IP地址問題:使用127.0.0.1在模擬中不能訪問到本地的服務器,因為模擬器也在本機
最後有使用Socket,ServerSocket網絡編程的示例
——使用URL進行網絡編程
**——使用URL訪問網絡資源**
URL對象代表統一資源定位符。它是指向互聯網中的資源。該資源可以是簡單的文件或目錄。也可以是對更復雜的對象的引用。
URL的格式:protocol://host:port/resourceName
可以使用構造器創建URL對象,一旦獲得URL對象,可以調用如下的方法訪問該URL對應的資源:
String getFile():獲取URL的資源名
String getHost():獲取URL的主機名
String getPath():獲取URL的路徑部分
int getPort():獲取URL的端口號
String getProtocol():獲取URL的協議名稱
String getQuery():獲取URL的查詢字符串部分
InputStream url.openStream():打開URL的連接,返回一個讀取該資源的InputStream。
**——使用URLConnection提交請求**
URL的openConnection()方法將返回一個URLConnection,該對象表示應用程序和URL之間的通信連接,程序可以通過URLConnection實例向該URL發送請求,讀取URL引用的資源。通常創建一個和URL的連接,並發送請求,讀取此URL引用的資源。
需要如下步驟:
a)通過調用URL對象openConnection()方法來創建URLConnection對象
b)設置URLConnection的參數和普通請求屬性
conn.setRequestProperty("accept","*/*");
conn.setRequestProperty("connection","Keep-Alive");
conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//發送POST請求必須設置如下兩行**
conn.setDoInput(true):設置該URLConnection的doInput請求頭字段的值
coon.setDoOutput(true):
c)調用connect():打開到此URL引用的資源的通信鏈接(如果尚未建立這樣的連接)。
如果在已打開連接(此時 connected 字段的值為 true)的情況下調用 connect 方法,則忽略該調用.
URLConnection 對象經歷兩個階段:首先創建對象,然後建立連接。
在創建對象之後,建立連接之前,可指定各種選項(例如doInput和UseCaches).連接後再進行設置就會發生錯誤。連接後才能進行的操作(例如getContentLength),如有必要,將隱式執行連接.
d)如果只是發送GET方式請求,使用connect方法建立和遠程資源之間的實際連接即可,在請求的地址中傳入數據。
如果需要發送Post方法請求。需要獲取
URLConnection實例對應的輸出流來發送請求參數,
PrintWriter out=new PrintWriter(conn.getOutputStream());
//解決亂碼問題
String n=EncodingUtils.getString("張三".getBytes(),"UTF-8");
out.write("name="+n+"&pwd="+pwd);
out.flush();//刷新輸出流的緩沖
e)遠程資源變為可用,程序可以訪問遠程資源的頭字段或通過輸入流讀取遠程資源的數據。
getInputStream()獲取輸入流。
從輸入流讀取response的數據。
注意:
1)如果既要使用輸入流讀取URLConnection響應的內容,也要使用輸出流發送請求參數,一定要先使用輸出流,再使用輸入流。
2)借助於URLConnection類的幫助,應用程序可以非常方便地與指定站點交換信息,包括發送GET請求,POST請求,並獲取網站的響應等。
使用Socket,ServerSocket編程示例:
效果:
ServerHuadong為服務器
基於TCPIP協議網絡編程為客戶端
前言之前因為項目需求,其中使用到了圖片的單擊顯示取消,圖片平移縮放功能,昨天突然想再加上圖片的旋轉功能,在網上看了很多相關的例子,可是沒看到能同時實現我想要的功能的。需求
1,HttpUrlConnection一個UrlConnection常用來通過網絡發送和獲取數據,數據可以使任何類型任何長度,HttpUrlConnecti
在Android項目中我們經常會遇到如下的UI展示需求就是模塊標題的顯示,通常後面內容是動態的,還有諸如有無向右箭頭,上下是否顯示線條等不同需求.之前項目中的做法是用一個
相關閱讀:Android開發框架之自定義ZXing二維碼掃描界面並解決取景框拉伸問題此項目源碼地址:請點擊這裡看一下zxing的項目結構,我這裡直接拿過來用的