第10章 Android互聯(lián)網(wǎng)應(yīng)用_第1頁
第10章 Android互聯(lián)網(wǎng)應(yīng)用_第2頁
第10章 Android互聯(lián)網(wǎng)應(yīng)用_第3頁
第10章 Android互聯(lián)網(wǎng)應(yīng)用_第4頁
第10章 Android互聯(lián)網(wǎng)應(yīng)用_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第10章 Android的網(wǎng)絡(luò)應(yīng)用共五十一頁10.1基于(jy)TCP協(xié)議的網(wǎng)絡(luò)通信10.2使用URL訪問網(wǎng)絡(luò)資源10.3使用HTTP訪問網(wǎng)絡(luò)10.4使用WebView視圖10.5使用Web Service進行網(wǎng)絡(luò)編程本章(bn zhn)導(dǎo)學(xué)共五十一頁10.1基于(jy)TCP協(xié)議的網(wǎng)絡(luò)通信共五十一頁10.1.1使用(shyng)ServerSocket創(chuàng)建TCP服務(wù)器端建立TCP服務(wù)器端的步驟:創(chuàng)建ServerSocket對象ServerSocket(int port)ServerSocket(int port ,int backlog):增加一個用來(yn li)改變連接隊列長度的參數(shù)ba

2、cklog;ServerSocket(int port,int backlog,InetAddress localAddr): 在機器存在多個IP地址的情況下,允許通過localAddr這個參數(shù)來指定將ServerSocket綁定到指定的 IP地址。啟動客戶端連接請求監(jiān)聽Socket accept()共五十一頁10.1.1使用(shyng)ServerSocket創(chuàng)建TCP服務(wù)器端建立TCP服務(wù)器端的代碼示例:/創(chuàng)建一個ServerSocket,用于監(jiān)聽(jin tn)客戶端Socket的連接請求ServerSocket ss = new ServerSocket(30000);/采用循環(huán)不斷

3、接受來自客戶端的請求while (true)/每當(dāng)接受到客戶端Socket的請求,服務(wù)器端也對應(yīng)產(chǎn)生一個SocketSocket s = ss.accept();OutputStream os = s.getOutputStream();os.write(您好,您收到了服務(wù)器的新年祝福!n.getBytes(utf-8);/關(guān)閉輸出流,關(guān)閉Socketos.close();s.close();共五十一頁10.1.2使用(shyng)Socket連接TCP服務(wù)器端使用Socket的構(gòu)造器來連接到指定服務(wù)器,Socket通用(tngyng)可使用以下構(gòu)造器共五十一頁10.1.2使用(shyng)S

4、ocket連接TCP服務(wù)器端使用Socket的構(gòu)造器來連接到指定(zhdng)服務(wù)器代碼示例Socket socket = new Socket(8 , 30000);/將Socket對應(yīng)的輸入流包裝成BufferedReaderBufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream();/進行普通IO操作String line = br.readLine();show.setText(來自服務(wù)器的數(shù)據(jù): + line);br.close();socket.close();共五十一頁1

5、0.1.3Socket通信簡單(jindn)實例簡單(jindn)項目實例:SimpleSocketSimpleClientAndroidManifest.xml增加權(quán)限共五十一頁10.1.4加入(jir)多線程實際情況中一個TCP服務(wù)器端需要同多個客戶端同時通信。使用傳統(tǒng)的BufferedReader的readLine()方法讀取數(shù)據(jù)時,當(dāng)該方法成功返回前,程序被阻塞,程序無法繼續(xù)執(zhí)行,因此服務(wù)器應(yīng)該為每個客戶端socket連接建立(jinl)一個線程。客戶端讀取服務(wù)器數(shù)據(jù)的線程同樣會被阻塞,所以系統(tǒng)應(yīng)該單獨啟動一個線程,負責(zé)讀取服務(wù)器數(shù)據(jù)。共五十一頁10.1.4加入(jir)多線程項目實例

6、功能需求:實現(xiàn)一個簡單C/S聊天室應(yīng)用,服務(wù)器端包含多個線程,每個Socket對應(yīng)一個線程,該線程負責(zé)讀取Socket對應(yīng)的輸入流輸入(從客戶端發(fā)送過來的數(shù)據(jù)),并將讀到的數(shù)據(jù)向每個socket輸出流發(fā)送一遍(將一個客戶端發(fā)送的數(shù)據(jù)廣播給其他客戶),因此需要在服務(wù)器端使用List保存建立的Socket。項目實例代碼MultiThreadServerMyServer.java:創(chuàng)建ServerSocket監(jiān)聽的主類ServerThread.java:負責(zé)處理每個Socket通信的線程類MultiThreadClientMultiThreadClient.java:負責(zé)生成(shn chn)主界面

7、,并響應(yīng)用戶動作,并將用戶輸入的數(shù)據(jù)寫入Socket對應(yīng)的輸出流中ClientThread.java:負責(zé)讀取Socket對應(yīng)輸入流中的數(shù)據(jù)(從服務(wù)器發(fā)送過來的數(shù)據(jù)),并將這些數(shù)據(jù)顯示在程序界面上共五十一頁本章(bn zhn)導(dǎo)學(xué)10.1基于TCP協(xié)議的網(wǎng)絡(luò)通信10.2使用(shyng)URL訪問網(wǎng)絡(luò)資源10.3使用HTTP訪問網(wǎng)絡(luò)10.4使用WebView視圖10.5使用Web Service進行網(wǎng)絡(luò)編程共五十一頁10.2使用(shyng)URL訪問網(wǎng)絡(luò)資源URL(Uniform Resource Locator)對象代表統(tǒng)一資源定位器,它是指向互聯(lián)網(wǎng)“資源”的指針。資源可以是簡單的文件(w

8、njin)或目錄,也可以是對更復(fù)雜對象的引用,例如對數(shù)據(jù)庫或搜索引擎的查詢。通常而言,URL由協(xié)議名、主機、端口和資源組成: protocol:/host:prot/resourceName 例如: /index.php共五十一頁10.2使用(shyng)URL訪問網(wǎng)絡(luò)資源URL類提供(tgng)的方法:String getFile():獲取此URL的資源名String getHost():獲取此URL的主機名String getpath():獲取此URL的路徑部分int getPort():獲取此URL的端口號String getProtocol():獲取此URL的協(xié)議String getQ

9、uery():獲取此URL的查詢字符串部分URLConnection openConnection():返回一個URLConnection 對象,它表示到 URL所引用的遠程對象的連接InputStream openStream():打開與此URL的連接,并返回一個用戶該讀取URL資源的InputStream共五十一頁10.2.1使用(shyng)URL讀取網(wǎng)絡(luò)資源項目(xingm)實例演示:URLTest將圖片文件下載到本地/data/data/ 3 /files共五十一頁10.2.1使用(shyng)URL讀取網(wǎng)絡(luò)資源項目(xingm)實例演示:URLTest:AndroidManifes

10、t.xml共五十一頁10.2.2使用URLConnection提交(tjio)請求URLConnection:表示應(yīng)用程序和 URL之間的通信(tng xn)連接。程序可以通過URLConnection實例向該 URL發(fā)送請求,讀取URL應(yīng)用的資源。共五十一頁10.2.2使用(shyng)URLConnection提交請求步驟:通過調(diào)用URL對象openConnection()方法來創(chuàng)建URLConnection對象設(shè)置URLConnection的參數(shù)和普通請求屬性如果只是發(fā)送 GET方式請求,使用connect方法建立(jinl)和遠程資源之間的實際連接即可;如果需要發(fā)送POST方式的請求,

11、需要獲取 URLConnection實例對應(yīng)的輸出流來發(fā)送請求參數(shù)遠程資源變?yōu)榭捎?,程序可以訪問遠程資源的頭字段,或通過輸入流讀取遠程資源的數(shù)據(jù)共五十一頁10.2.2使用(shyng)URLConnection提交請求項目實例(shl)演示:服務(wù)端(Tomcat): :8080/abc/a.jsp :8080/abc/login.jsp客戶端(手機端):GetPostTest共五十一頁本章(bn zhn)導(dǎo)學(xué)10.1基于TCP協(xié)議的網(wǎng)絡(luò)通信10.2使用URL訪問(fngwn)網(wǎng)絡(luò)資源10.3使用HTTP訪問網(wǎng)絡(luò)10.4使用WebView視圖10.5使用Web Service進行網(wǎng)絡(luò)編程共五十一

12、頁10.3使用(shyng)HTTP訪問網(wǎng)絡(luò)使用(shyng)HttpURLConnection使用Apache HttpClient共五十一頁10.3.1使用(shyng)HttpURLConnectionURLConnection的子類:HttpURLConnection更加便捷地操作HTTP資源(zyun)Int getResponseCode():獲取服務(wù)器的響應(yīng)代碼String getResponseMessage():獲取服務(wù)器的響應(yīng)消息String getRequestMethod():獲取發(fā)送請求的方法Void setRequestMethod(String method):設(shè)

13、置發(fā)送請求的方法共五十一頁10.3.1使用(shyng)HttpURLConnection項目實例:多線程下載MultiThreadDown創(chuàng)建URL對象獲取指定URL對象所指向資源的大?。ㄓ蒰etContentLength()方法(fngf)實現(xiàn)),此處用到HttpURLConnection類在本地磁盤上創(chuàng)建一個與網(wǎng)絡(luò)資源相同大小的空文件計算每個線程應(yīng)該下載網(wǎng)絡(luò)資源的哪個部分(從哪個字節(jié)開始,到哪個字節(jié)結(jié)束)以此創(chuàng)建、啟動多個線程來下載網(wǎng)絡(luò)資源的指定部分共五十一頁10.3.2使用(shyng)Apache HttpClientHttpURLConnection處理session、cookie

14、這些(zhxi)細節(jié),難度加大。Apache開源組織提供了HttpClient項目共五十一頁本章(bn zhn)導(dǎo)學(xué)10.1基于TCP協(xié)議的網(wǎng)絡(luò)通信10.2使用URL訪問網(wǎng)絡(luò)資源10.3使用HTTP訪問網(wǎng)絡(luò)10.4使用WebView視圖(sht)10.5使用Web Service進行網(wǎng)絡(luò)編程共五十一頁10.4 使用WebView瀏覽(li ln)網(wǎng)頁WebView組件,類似ImageView,但功能要強大很多:瀏覽器實現(xiàn)內(nèi)核基于開源(ki yun)WebKit引擎Android的WebView組件使用非常簡單,可以使用loadUrl()加載一個Url地址,也可以使用loadData()或loa

15、dDataWithBaseURL()加載一段HTML代碼片段。 共五十一頁10.4使用(shyng)WebView瀏覽網(wǎng)頁常用方法:void goBack():后退void goForward():前進boolean zoomIn():方法網(wǎng)頁boolean zoomOut():縮小網(wǎng)頁void loadUrl(String url):加載指定(zhdng)URL對應(yīng)的網(wǎng)頁void loadData(String data ,String mineType,String encodeing):可能會顯示亂碼void loadDataWithBaseURL(String baseUrl,Stri

16、ng data,String mineType,String encoding,String historyUrl):共五十一頁10.4使用(shyng)WebView瀏覽網(wǎng)頁項目實例(shl)1:MiniBrowser(使用loadUrl)共五十一頁10.4使用(shyng)WebView瀏覽網(wǎng)頁項目(xingm)實例2:ViewHtml (使用loadDataWithBaseURL)共五十一頁本章(bn zhn)導(dǎo)學(xué)10.1基于TCP協(xié)議(xiy)的網(wǎng)絡(luò)通信10.2使用URL訪問網(wǎng)絡(luò)資源10.3使用HTTP訪問網(wǎng)絡(luò)10.4使用WebView視圖10.5使用Web Service進行網(wǎng)絡(luò)編程

17、共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程Web Service簡介Web Service是一個應(yīng)用組件,它邏輯性的為其他應(yīng)用程序提供數(shù)據(jù)與服務(wù).各應(yīng)用程序通過網(wǎng)絡(luò)協(xié)議和規(guī)定的一些標準數(shù)據(jù)格式(Http,XML,Soap)來訪問Web Service,通過Web Service內(nèi)部執(zhí)行得到所需結(jié)果.Web Service可以執(zhí)行從簡單的請求到復(fù)雜商務(wù)(shngw)處理的任何功能。共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程Web Service主要設(shè)計思想充分利用Web 分布式編程模型的松散耦合性,允許各種平臺、各種編程語言的應(yīng)用可以交換數(shù)

18、據(jù),可以無縫地整在一起。也就是說,Web Service提供了一種建立分布式應(yīng)用的平臺,使得(sh de)不同操作平臺上、不同語言實現(xiàn)的軟件、所有已開發(fā)、部署的軟件,都可以充分利用這個平臺實現(xiàn)分布式計算。共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程Web Service特點自包含性自描述性封裝性可編程性松散耦合高度(god)的開放性使用標準協(xié)議高度整合的能力共五十一頁10.5使用(shyng)Web Service進行網(wǎng)絡(luò)編程Web Service簡介(jin ji)共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程Web Service架構(gòu)(ji

19、 u)共五十一頁10.5使用(shyng)Web Service進行網(wǎng)絡(luò)編程Web Service架構(gòu)(ji u)XMLSOAP: Simple object access protocolWSDL:Web Services Description LanguageUDDI:Universal Description, Discovery and Integration共五十一頁10.5使用(shyng)Web Service進行網(wǎng)絡(luò)編程Web Service架構(gòu)(ji u):SOAP依賴XML來構(gòu)建,主要包含如下三個元素:必需的根元素,SOAP消息對應(yīng)的XML文檔以該元素作為根元素可選的元素

20、,包含SOAP消息的頭信息必需的元素,包含所有的調(diào)用和響應(yīng)信息共五十一頁10.5使用(shyng)Web Service進行網(wǎng)絡(luò)編程Web Service架構(gòu)(ji u):WSDL,例子:crazyit_simplews.xmlSimpleWs.java SimpleWsImpl.java WsdlServer.java共五十一頁10.5使用(shyng)Web Service進行網(wǎng)絡(luò)編程Web Service調(diào)用原理服務(wù)提供者首先建立Web服務(wù) , 然后把服 務(wù)發(fā)布(fb)給所有用戶 。任何平臺上的用戶可以通過閱讀其WSDL文檔生成一個 SOAP請求消息 。 這個SOAP消息嵌入到一個HTT

21、P POST請求中發(fā)送到 Web服務(wù)所在的 Web服務(wù)器 。Web服務(wù)器把請求轉(zhuǎn)發(fā)給 Web服務(wù)請求處理器 , 請求處理器解析SOAP請求 , 然后調(diào)用Web服務(wù)生成相應(yīng)的 SOAP應(yīng)答 。Web服務(wù)器得到 SOAP應(yīng)答后通過HTTP送回客戶端 。共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程Ksoap2-android項目支持android平臺(pngti)webservice調(diào)用共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程項目(xingm)實例1:WsServerFirstWs.javaimport java.util.*;import j

22、avax.xml.bind.annotation.adapters.*;import javax.jws.*;/以WebService Annotation標注,表明該接口將對應(yīng)一個Web ServicesWebServicepublic interface FirstWs /定義一個方法,該方法將被暴露成一個Web Services操作List getUserList(String base);共五十一頁10.5使用(shyng)Web Service進行網(wǎng)絡(luò)編程項目實例1:WsServerFirstWsImpl.javaWebService(endpointInterface = lee.

23、FirstWs, serviceName = firstWs)public class FirstWsImpl implements FirstWs Overridepublic List getUserList(String base) System.out.println(-調(diào)用(dioyng)getUserList方法- + base);List result = new ArrayList();result.add(new User(1 , base + crazyit , 123 , 173);result.add(new User(2 , base + leegang , 456

24、, 178);return result;共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程項目(xingm)實例1:WsServerUser.java(見代碼)共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程項目實例1:WsServerServer.javapublic class Server public static void main(String args) System.out.println(啟動服務(wù)器);/創(chuàng)建(chungjin)Web Services服務(wù)提供類的實例FirstWsImpl implementor = new Fir

25、stWsImpl();String address = 8:9999/crazyit;/將指定Web Services服務(wù)提供類的對象發(fā)布成Web ServicesEndpointImpl ep = (EndpointImpl)Endpoint.publish(address , implementor);/添加兩個CXF自帶的攔截器,用于跟蹤SOAP消息ep.getServer().getEndpoint().getInInterceptors().add(new LoggingInInterceptor();ep.getServer().getEndpoint().getOutInterc

26、eptors().add(new LoggingOutInterceptor();共五十一頁10.5使用Web Service進行(jnxng)網(wǎng)絡(luò)編程項目(xingm)實例1:WsServer共五十一頁10.5使用(shyng)Web Service進行網(wǎng)絡(luò)編程項目實例2:CallWs(調(diào)用web service)步驟工程中添加jar包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar創(chuàng)建HttpTransportSE對象,該對象用于調(diào)用Web Service操作創(chuàng)建SoapSerializationEnvelope對象創(chuàng)建SoapObject對象,創(chuàng)建該對象時需要傳入所調(diào)用Web service的命名空間(8:8888/xxx)如果有從調(diào)用端傳入?yún)?shù)給Web service,調(diào)用SoapObject對象的addProperty(String name,Object value)對SoapSerializationEnvelope對象屬性bodyOut賦值,將前兩步創(chuàng)建的對象So

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論