第八章 網(wǎng)絡(luò)與數(shù)據(jù)通信技術(shù)_第1頁(yè)
第八章 網(wǎng)絡(luò)與數(shù)據(jù)通信技術(shù)_第2頁(yè)
第八章 網(wǎng)絡(luò)與數(shù)據(jù)通信技術(shù)_第3頁(yè)
第八章 網(wǎng)絡(luò)與數(shù)據(jù)通信技術(shù)_第4頁(yè)
第八章 網(wǎng)絡(luò)與數(shù)據(jù)通信技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第八章 網(wǎng)絡(luò)與數(shù)據(jù)通信技術(shù)俞成海俞成海教學(xué)任教學(xué)任務(wù)USB 編程Wi-Fi 編程藍(lán)牙編程Socket實(shí)現(xiàn)技術(shù)HTTP 協(xié)議通信實(shí)現(xiàn)技術(shù)教學(xué)重點(diǎn)藍(lán)牙編程Socket實(shí)現(xiàn)技術(shù)US兩種模式來(lái)支持Android USB外設(shè) :USB 外設(shè)模式和USB主機(jī)模式 在 USB 外設(shè)模式下,外部 USB 硬件(裝有Android的設(shè)備要連接的外部設(shè)備)充當(dāng) USB 主機(jī)。外設(shè)的例子包括機(jī)器人、擴(kuò)展插座、診斷和音樂(lè)設(shè)備、電子報(bào)亭、讀卡器等其他設(shè)備,這種模式給予不具備主機(jī)功能的 Android 設(shè)備以與USB硬件交互的能 力。在USB主機(jī)模式下,裝有 Android 的設(shè)備扮演著主機(jī)的角色。這種設(shè)備的例子包括數(shù)碼

2、像機(jī),鍵盤(pán),鼠標(biāo)和游戲手柄。那些適應(yīng)面很廣的USB設(shè)備仍可以與Android應(yīng)用交互,前提是這些Android應(yīng)用可以正確的與這些設(shè)備通訊。 http:/ manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap deviceList = manager.getDeviceList(); UsbDevice device =deviceList.get(deviceName); 和設(shè)備通信和設(shè)備通信 UsbInterface intf= device.getInterface(0); UsbEndpoint en

3、dpoint= intf.getEndpoint(0); UsbDeviceConnection connection= manager.openDevice(device); connection.claimInterface(intf, true); connection.bulkTransfer(endpoint, bytes, bytes.length, 0); 終止通信終止通信 當(dāng)你完成數(shù)據(jù)的傳輸或者你的設(shè)備已拔出時(shí),通過(guò)調(diào)用releaseInterface()和close()來(lái)關(guān)閉接口和連接。Wi-Fi 編程ConnecerNetworkInfo mWiFiNetworkInfo

4、= mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)所需要用到的wifi相關(guān)Android包:.wifi常見(jiàn)操作主要包括以下及各類和接口:1、WifiManager 提供了管理WiFi連接的大部分API,主要包括如下內(nèi)容:查看已經(jīng)配置好的網(wǎng)絡(luò)清單,而且可以修改個(gè)別記錄的屬性??梢越⒒蚴顷P(guān)閉WiFi網(wǎng)絡(luò)連接,并且可以查詢有關(guān)網(wǎng)絡(luò)狀態(tài)的動(dòng)態(tài)信息。對(duì)接入點(diǎn)的掃描結(jié)果包含足夠的信息來(lái)決定需要與什么接入點(diǎn)建立連接。同時(shí)還定義了許多常量來(lái)表示W(wǎng)iFi狀態(tài)的改變。常用的方法:getWiFiState , isWifiEna

5、bled,setWifiEnabled,startScan,getScanResults等等WiFi所需要用到的所需要用到的wifi相關(guān)相關(guān)Android包:包:.wifi常見(jiàn)操作主要包括以下及各類和接口:常見(jiàn)操作主要包括以下及各類和接口:2、WifiConfigurationWiFi網(wǎng)絡(luò)的配置,包括安全配置等。網(wǎng)絡(luò)的配置,包括安全配置等。3.WifiInfoWiFi無(wú)線連接的描述,包括接入點(diǎn)、網(wǎng)絡(luò)連接狀態(tài)、隱藏的接無(wú)線連接的描述,包括接入點(diǎn)、網(wǎng)絡(luò)連接狀態(tài)、隱藏的接入點(diǎn),入點(diǎn),ip地址、連接速度、地址、連接速度、mac地址、網(wǎng)絡(luò)地址、網(wǎng)絡(luò)id,信號(hào)強(qiáng)度等信信號(hào)強(qiáng)度等信息。息。4.ScanRes

6、ult主要用來(lái)描述已經(jīng)檢測(cè)出的接入點(diǎn),包括接入點(diǎn)的地址、接入主要用來(lái)描述已經(jīng)檢測(cè)出的接入點(diǎn),包括接入點(diǎn)的地址、接入點(diǎn)的名稱、身份認(rèn)證、頻率、信號(hào)強(qiáng)度等信息。點(diǎn)的名稱、身份認(rèn)證、頻率、信號(hào)強(qiáng)度等信息。找到周圍A檢測(cè)網(wǎng)卡狀態(tài),修改網(wǎng)卡狀態(tài)檢測(cè)網(wǎng)卡狀態(tài),修改網(wǎng)卡狀態(tài)開(kāi)啟,進(jìn)行掃描周圍開(kāi)啟,進(jìn)行掃描周圍ap,打印結(jié)果打印結(jié)果class ListWifiListerner implements OnClickListenerOverride public void onClick(View v) wifiManager = (WifiManager)WifiActivity.this.getSystem

7、Service(Context.WIFI_SERVICE);wifiManager.startScan(); mWifiList = wifiManager.getScanResults(); for(int i=0;imWifiList.size();i+) sb.append(new Integer(i).toString()+.); sb.append(mWifiList.get(i).toString(); sb.append(n); mainText.setText(sb); sb.delete(0, sb.capacity(); 藍(lán)牙,使用藍(lán)牙進(jìn)行設(shè)備通信,主要包含四個(gè)部分:藍(lán)牙設(shè)

8、置、搜索設(shè)備、連接、傳輸數(shù)據(jù)BluetoothAdapter 代表本地藍(lán)牙適配器(藍(lán)牙發(fā)射器),是所有藍(lán)牙交互的入。通過(guò)它可以搜索其它藍(lán)牙設(shè)備,查詢已經(jīng)配對(duì)的設(shè)備列表,通過(guò)已知的MAC地址創(chuàng)建BluetoothDevice,創(chuàng)建BluetoothServerSocket監(jiān)聽(tīng)來(lái)自其它設(shè)備的通信。BluetoothDevice 代表了一個(gè)遠(yuǎn)端的藍(lán)牙設(shè)備, 使用它請(qǐng)求遠(yuǎn)端藍(lán)牙設(shè)備連接或者獲取 遠(yuǎn)端藍(lán)牙設(shè)備的名稱、地址、種類和綁定狀態(tài)。 BluetoothSocket 代表了一個(gè)藍(lán)牙套接字的接,是應(yīng)用程 序通過(guò)輸、輸出流與其他藍(lán)牙設(shè)備通信的連接點(diǎn)。BluetoothServerSocket 代表打開(kāi)服

9、務(wù)連接來(lái)監(jiān)聽(tīng)可能到來(lái)的連接請(qǐng)求 (屬于 server 端) , 為了連接兩個(gè)藍(lán)牙設(shè)備必須有一個(gè)設(shè)備作為服務(wù)器打開(kāi)一個(gè)服務(wù)套接字。 BluetoothClass 描述了一個(gè)設(shè)備的特性(profile)或該設(shè)備上的藍(lán)牙一致可以提供哪些服務(wù)(service),但不可信。比如,設(shè)備是一個(gè)電話、計(jì)算機(jī)或手持設(shè)備;設(shè)備可以提供audio/telephony服務(wù)等。可以用它來(lái)進(jìn)行一些UI上的提示。BluetoothHeadset 提供手機(jī)使用藍(lán)牙耳機(jī)的支持。這既包括藍(lán)牙耳機(jī)和免提(V1.5)模式。BluetoothA2dp 定義高品質(zhì)的音頻,可以從一個(gè)設(shè)備傳輸?shù)搅硪粋€(gè)藍(lán)牙連接。 “A2DP的”代表高級(jí)音頻分

10、配模式。BluetoothHealth 代表了醫(yī)療設(shè)備配置代理控制的藍(lán)牙服務(wù)BluetoothHealthCallback一個(gè)抽象類,使用實(shí)現(xiàn)BluetoothHealth回調(diào)。你必須擴(kuò)展這個(gè)類并實(shí)現(xiàn)回調(diào)方法接收更新應(yīng)用程序的注冊(cè)狀態(tài)和藍(lán)牙通道狀態(tài)的變化。BluetoothHealthAppConfiguration 代表一個(gè)應(yīng)用程序的配置,藍(lán)牙醫(yī)療第三方應(yīng)用注冊(cè)與遠(yuǎn)程藍(lán)牙醫(yī)療設(shè)備交流。BluetoothProfile.ServiceListener 當(dāng)他們已經(jīng)連接到或從服務(wù)斷開(kāi)時(shí)通知BluetoothProfile IPX的客戶時(shí)一個(gè)接(即運(yùn)行一個(gè)特定的配置文件,內(nèi)部服務(wù))。BlueT至少要

11、在AndroidManifest.xml中聲明兩個(gè)權(quán)限:BLUETOOTH和 BLUETOOTH_ADMIN獲取BluetoothAdapter打開(kāi)藍(lán)牙:通過(guò)isEnabled()來(lái)檢查藍(lán)牙當(dāng)前是否可用。如果這個(gè)方法返回false,則藍(lán)牙不能夠使用。為了請(qǐng)求藍(lán)牙使用,呼叫startActivityForResult()與的ACTION_REQUEST_ENABLE動(dòng)作意圖獲取BluetoothAdapter查找匹配設(shè)備掃描設(shè)備開(kāi)始搜索設(shè)備,調(diào)用開(kāi)始搜索設(shè)備,調(diào)用startDiscovery() 。該函數(shù)是異步的,調(diào)用后立即返回,。該函數(shù)是異步的,調(diào)用后立即返回,返回值表示搜索是否成功開(kāi)始。返回

12、值表示搜索是否成功開(kāi)始。應(yīng)用中可以注冊(cè)一個(gè)帶應(yīng)用中可以注冊(cè)一個(gè)帶ACTION_FOUND Intent的的BroadcastReceiver,搜,搜索到每一個(gè)設(shè)備時(shí)都接收到消息。索到每一個(gè)設(shè)備時(shí)都接收到消息。Intent攜帶著而外的字段信息攜帶著而外的字段信息EXTRA_DEVICE和和EXTRA_CLASS,分別包含一個(gè),分別包含一個(gè)BluetoothDevice和一和一個(gè)個(gè)BluetoothClass。使用使用cancelDiscovery()來(lái)停止搜索來(lái)停止搜索使能被發(fā)現(xiàn)如果想讓本地設(shè)備被其他設(shè)備發(fā)現(xiàn),可以帶ACTION_REQUEST_DISCOVERABLE action Inten

13、t調(diào)用startActivityForResult(Intent, int) 方法作為服務(wù)器連接通過(guò)持有通過(guò)持有個(gè)打開(kāi)的個(gè)打開(kāi)的BluetoothServerSocket對(duì)對(duì)象。服務(wù)器象。服務(wù)器socket的作用是偵聽(tīng)進(jìn)來(lái)的連接,如的作用是偵聽(tīng)進(jìn)來(lái)的連接,如果一個(gè)連接被接受,提供一個(gè)連接好的果一個(gè)連接被接受,提供一個(gè)連接好的BluetoothSocket對(duì)象。對(duì)象。建立服務(wù)器socket1.通過(guò)調(diào)用listenUsingRfcommWithServiceRecord(String, UUID)得到一個(gè)BluetoothServerSocket對(duì)象,當(dāng)客戶端試圖連接本設(shè)備,它將攜帶一個(gè)UUID用

14、來(lái)唯一標(biāo)識(shí)它要連接的服務(wù),UUID必須匹配,連接才會(huì)被接受。2.通過(guò)調(diào)用accept()來(lái)偵聽(tīng)連接請(qǐng)求。這是一個(gè)阻塞的調(diào)用,直到有連接進(jìn)來(lái)或者產(chǎn)生異常才會(huì)返回。只有遠(yuǎn)程設(shè)備發(fā)送一個(gè)連接請(qǐng)求,并且攜帶的UUID與偵聽(tīng)它socket注冊(cè)的UUID匹配,連接請(qǐng)求才會(huì)被接受。如果成功,accept()將返回一個(gè)連接好的BluetoothSocket對(duì)象。3.除非需要再接收另外的連接,否則的話調(diào)用close() 。close()釋放server socket和它的資源,但不會(huì)關(guān)閉連接accept()返回的連接好的BluetoothSocket對(duì)象。作為客1.用BluetoothDevice調(diào)用creat

15、eRfcommSocketToServiceRecord(UUID)獲取一個(gè)BluetoothSocket對(duì)象。 這個(gè)初始化的BluetoothSocket會(huì)連接到BluetoothDevice。2.調(diào)用connect()完成連接 當(dāng)調(diào)用這個(gè)方法的時(shí)候,系統(tǒng)會(huì)在遠(yuǎn)程設(shè)備上完成一個(gè)SDP查找來(lái)匹配UUID。如果查找成功并且遠(yuǎn)程設(shè)備接受連接,就共享RFCOMM信道,connect()會(huì)返回。這也是一個(gè)阻塞的調(diào)用,不管連接失敗還是超時(shí)(12秒)都會(huì)拋出異常。管理連接如果已經(jīng)連接了兩個(gè)設(shè)備,他們都已經(jīng)擁有各自的連接好的BluetoothSocket對(duì)象??梢栽谠O(shè)備間共享數(shù)據(jù)了。使用BluetoothS

16、ocket,傳輸任何數(shù)據(jù)通常來(lái)說(shuō)都很容易了:1.通過(guò)socket獲取輸入輸出流來(lái)處理傳輸(分別使用getInputStream()和getOutputStream() )。2.用read(byte)和write(byte)來(lái)實(shí)現(xiàn)讀寫(xiě)?;赟ockSocket網(wǎng)絡(luò)通信的組成元素服務(wù)器,主要功能:偵聽(tīng)連接、接收連接、接收數(shù)據(jù)和向客戶端發(fā)送數(shù)據(jù)??蛻舳耍饕δ埽喊l(fā)起連接、接收數(shù)據(jù)和向服務(wù)器發(fā)送數(shù)據(jù)Socket網(wǎng)絡(luò)通信的基本原理IP地址 : 主機(jī)標(biāo)識(shí)端 口 : 服務(wù)類型Socket = IP(address) + Port(server)Java-Internet語(yǔ)言語(yǔ)言具備強(qiáng)大網(wǎng)絡(luò)通信功能具備強(qiáng)大

17、網(wǎng)絡(luò)通信功能基于套接字(Socket)通信方式流套接字TCP協(xié)議協(xié)議(Transmission Control Protocol)UDP協(xié)議協(xié)議 (User Datagram Protocol)數(shù)據(jù)報(bào)套接字主要 Java的的Socket屬于流式套接字通信,采用屬于流式套接字通信,采用TCP協(xié)議,提協(xié)議,提供面向連接的服務(wù),實(shí)現(xiàn)可靠的通信。供面向連接的服務(wù),實(shí)現(xiàn)可靠的通信。 J提供兩個(gè)類,實(shí)現(xiàn)Socke通信:ServerSocket - 服務(wù)器端 Socket - 客戶端通 操作TCP 套接字的發(fā)送和接收需要借助java.io包的 InputStream / OutputStream 完成,分別

18、通過(guò)方法實(shí)現(xiàn):Socket.getInputStream() / Socket.getOutputStream()Socket/Serv Socket() 通過(guò)系統(tǒng)默認(rèn)類型的通過(guò)系統(tǒng)默認(rèn)類型的 SocketImpl 創(chuàng)建未連接套接字創(chuàng)建未連接套接字 Socket(InetAddress address, int port) 創(chuàng)建一個(gè)流套接字并將其連接到指定創(chuàng)建一個(gè)流套接字并將其連接到指定 IP 地址的指定端口號(hào)地址的指定端口號(hào) Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 創(chuàng)建一個(gè)套接字并

19、將其連接到指定遠(yuǎn)程端口上的指定遠(yuǎn)程地址創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程端口上的指定遠(yuǎn)程地址 Socket(String host, int port) 創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào)創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào) Socket(String host, int port, InetAddress localAddr, int localPort) 創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程主機(jī)上的指定遠(yuǎn)程端口創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程主機(jī)上的指定遠(yuǎn)程端口ServerSocket() 創(chuàng)建非綁定服務(wù)器套接字 ServerSocket(int port)

20、創(chuàng)建綁定到特定端口的服務(wù)器套接字 ServerSocket(int port, int backlog) 利用指定的 backlog 創(chuàng)建服務(wù)器套接字并將其綁定到指定的本地端口號(hào) ServerSocket(int port, int backlog, InetAddress bindAddr) 使用指定的端口、偵聽(tīng) backlog 和要綁定到的本地 IP 地址創(chuàng)建服務(wù)器 Socket/ServSockOutputStream獲得獲得Socket對(duì)象輸出流對(duì)象輸出流建立Socket連接通過(guò)流傳輸數(shù)據(jù)服務(wù)端聯(lián)結(jié)成功聯(lián)結(jié)成功獲得已連接的獲得已連接的Socket對(duì)象對(duì)象Socket (host,por

21、t)Socket (host,port) 創(chuàng)建創(chuàng)建Socket對(duì)象對(duì)象向指定主機(jī)端口發(fā)出連接請(qǐng)求向指定主機(jī)端口發(fā)出連接請(qǐng)求客戶端Socket對(duì)象ServerSocket對(duì)象InputStream獲得獲得Socket對(duì)象輸入流對(duì)象輸入流申請(qǐng)連接ServiceSocket.close()停止提供停止提供TCP連接服務(wù)連接服務(wù)一個(gè)一個(gè)ServerSocket對(duì)象和一個(gè)對(duì)象和一個(gè)Socket對(duì)象對(duì)象一個(gè)一個(gè)Socket對(duì)象對(duì)象Socket.close()關(guān)閉關(guān)閉TCP連接連接ServerSocket (port)創(chuàng)建創(chuàng)建ServiceSocke對(duì)象對(duì)象,提供提供TCP連接服務(wù)連接服務(wù)accept ()

22、在指定的端口監(jiān)聽(tīng)客戶端請(qǐng)求聯(lián)結(jié)創(chuàng)建在指定的端口監(jiān)聽(tīng)客戶端請(qǐng)求聯(lián)結(jié)創(chuàng)建InputStream獲得獲得Socket對(duì)象輸入流對(duì)象輸入流Socket.close()關(guān)閉關(guān)閉TCP連接連接OutputStream獲得獲得Socket對(duì)象輸出流對(duì)象輸出流ServerSocket對(duì)象訪問(wèn)監(jiān)聽(tīng)SockServer端Client端service = ServerSocket (port_number)創(chuàng)建service對(duì)象,以TCP服務(wù)實(shí)現(xiàn)端口監(jiān)聽(tīng)socket = ServerSocket.accept()創(chuàng)建socke對(duì)象, 接收用戶訪問(wèn)請(qǐng)求Socket = Socket (port_number)創(chuàng)建so

23、cke對(duì)象,建立連接,發(fā)送訪問(wèn)請(qǐng)求InputStream Socket對(duì)象輸入流OutputStream Socket對(duì)象輸出流通過(guò)socke對(duì)象實(shí)現(xiàn)與Client端數(shù)據(jù)傳輸OutputStream Socket對(duì)象輸出流InputStream Socket對(duì)象輸入流通過(guò)socke對(duì)象,實(shí)現(xiàn)與Servert端數(shù)據(jù)傳輸socket.close() 關(guān)閉Socke關(guān)閉結(jié)束與Client端的連接service. close()關(guān)閉監(jiān)聽(tīng)程序socket.close() 關(guān)閉Socke結(jié)束與Server端的連接(1)建立連接(2)數(shù)據(jù)通訊(3)拆除連接客開(kāi)啟INTERNET布局界面(Main.xml)獲

24、取資源(EditText,Button,TextView)Socket通信數(shù)據(jù)讀寫(xiě)(DataInputStream/DataOutputStream)客戶端主要代碼:public void onClick(View v) Socket s = null;DataOutputStream dout = null;DataInputStream din = null;if(v = button1)/點(diǎn)擊的是按鈕try s = new Socket(02, 8888);/連接服務(wù)器dout = new DataOutputStream(s.getOutputStream();/

25、得到輸出流din = new DataInputStream(s.getInputStream();/得到輸入流dout.writeUTF(editText.getText().toString();/向服務(wù)器發(fā)送消息textView.setText(服務(wù)器發(fā)來(lái)的消息: + din.readUTF();/接收服務(wù)器發(fā)來(lái)的消息 catch (Exception e) e.printStackTrace();/打印異常信息 finally tryif(dout != null)dout.close();/關(guān)閉輸入流if(din != null)din.close();/關(guān)閉輸入流if(s != n

26、ull)s.close();/關(guān)閉Socket連接catch(Exception e)e.printStackTrace();/打印異常信息服務(wù)器ServerSocketAcceptDataInputStream/DataOutputStreamRead/Write服務(wù)器端主要代碼:ServerSocket ss = null;/ServerSocket的引用Socket s = null;/Socket的引用DataInputStream din = null;DataOutputStream dout = null;tryss = new ServerSocket(8888);/監(jiān)聽(tīng)到88

27、88端口System.out.println(已監(jiān)聽(tīng)到8888端口!);catch(Exception e)e.printStackTrace();/打印異常信息while(true)trys = ss.accept();/等待客戶端連接din = new DataInputStream(s.getInputStream();dout = new DataOutputStream(s.getOutputStream();/得到輸入輸出流String msg = din.readUTF();/讀一個(gè)字符串System.out.println(ip: + s.getInetAddress();/打

28、印客戶端IPSystem.out.println(msg: + msg);/打印客戶端發(fā)來(lái)的消息System.out.println(=);dout.writeUTF(Hello Client!);/向客戶端發(fā)送消息catch(Exception e)e.printStackTrace();/打印異常信息統(tǒng)一資源定位器URL:URL(Uniform Resource Locator)是一致資源定位器的簡(jiǎn)稱,它表示Internet上某一資源的地址。通過(guò)URL我們可以訪問(wèn)Internet上的各種網(wǎng)絡(luò)資源,比如最常見(jiàn)的WWW,F(xiàn)TP站點(diǎn)。瀏覽器通過(guò)解析給定的URL可以在網(wǎng)絡(luò)上查找相應(yīng)的文件或其他資源

29、。URL的組成protocol:/resourceName協(xié)議名(protocol)指明獲取資源所使用的傳輸協(xié)議,如http、ftp、gropher、file等,資源名(resourceName)則應(yīng)該是資源的完整地址,包括主機(jī)名、端口號(hào)、文件名或文件內(nèi)部的一個(gè)引用。例如:http:/ 協(xié)議名:/主機(jī)名http:/ 協(xié)議名:/機(jī)器名文件名http:/:80/Gamelan/network.html#BOTTOM 協(xié)議名:/機(jī)器名端口號(hào)文件名內(nèi)部引用.創(chuàng)建一個(gè)創(chuàng)建一個(gè)URL為了表示URL, 中實(shí)現(xiàn)了類URL。我們可以通過(guò)下面的構(gòu)造方法來(lái)初始化一個(gè)URL對(duì)象:(1) public URL (Str

30、ing spec);(2) public URL(URL context, String spec);(3) public URL(String protocol, String host, String file);(4) public URL(String protocol, String host, int port, String file);解析一個(gè)解析一個(gè)URL一個(gè)URL對(duì)象生成后,其屬性是不能被改變的,但是我們可以通過(guò)類URL所提供的方法來(lái)獲取這些屬性 從從URL讀取讀取WWW網(wǎng)絡(luò)資源網(wǎng)絡(luò)資源當(dāng)我們得到一個(gè)URL對(duì)象后,就可以通過(guò)它讀取指定的WWW資源。通過(guò)通過(guò)HttpURLCo

31、nnetction連接連接WWW 通過(guò)URL的方法openStream(),我們只能從網(wǎng)絡(luò)上讀取數(shù)據(jù),如果我們同時(shí)還想輸出數(shù)據(jù),例如向服務(wù)器端的CGI程序發(fā)送一些數(shù)據(jù),我們必須先與URL建立連接,然后才能對(duì)其進(jìn)行讀寫(xiě),這時(shí)就要用到類URLConnection了。CGI是公共網(wǎng)關(guān)接口(Common Gateway Interface)的簡(jiǎn)稱,它是用戶瀏覽器和服務(wù)器端的應(yīng)用程序進(jìn)行連接的接口,有關(guān)CGI程序設(shè)計(jì),請(qǐng)讀者參考有關(guān)書(shū)籍。類HttpURLConnetction也在包中定義,它表示Java程序和URL在網(wǎng)絡(luò)上的通信連接。當(dāng)與一個(gè)URL建立連接時(shí),首先要在一個(gè)URL對(duì)象上通過(guò)方法openCo

32、nnection()生成對(duì)應(yīng)的HttpURLConnetction對(duì)象。如果連接過(guò)程失敗,將產(chǎn)生IOException. HttpURLConnection ucon = null; BufferedReader reader = null; StringBuilder bab=null; try URL myURL = new URL(http:/localhost/test.html);/初始化URL ucon = (HttpURLConnection)myURL.openConnection();/打開(kāi)連接 ucon.setRequestMethod(GET); ucon.connect

33、(); reader =new BufferedReader(new InputStreamReader(ucon.getInputStream(),gb2312);/得到輸入流 String currentline; bab = new StringBuilder(); while(currentline=reader.readLine() != null) bab.append(currentline);/將收到的信息添加到StringBuilder中 bab.append(rn); jsonstring=bab.toString(); catch (Exception e) e.prin

34、tStackTrace();/打印異常信息 finally try if(reader!=null) reader.close(); catch (IOException e) e.printStackTrace(); What iJavaScript Object Notation輕量級(jí)的數(shù)據(jù)交換格式描述數(shù)據(jù)的格式輕量級(jí)(格式簡(jiǎn)單,一個(gè)頁(yè)面的官網(wǎng))易于人閱讀和編寫(xiě)易于機(jī)器解析和生成獨(dú)立于語(yǔ)言文本格式使用早期是網(wǎng)頁(yè)瀏覽器與Web服務(wù)器之間交互數(shù)據(jù)的格式與XML一起作為Ajax返回的兩種主要格式由于其輕量級(jí)的原因,逐漸成為主流的數(shù)據(jù)交換格式對(duì)對(duì)無(wú)序的“名稱/值對(duì)”集合一個(gè)對(duì)象以“”(左括號(hào))開(kāi)始

35、,“”(右括號(hào))結(jié)束每個(gè)“名稱”后跟一個(gè)“:”(冒號(hào)),再后跟著值,構(gòu)成一個(gè)“名稱/值對(duì)”每個(gè)“名稱/值對(duì)”之間用“,”(逗號(hào))分隔例如: name: Li Lei, Gender: male, age: 35 數(shù)數(shù)有序的值的集合一個(gè)數(shù)組以“”(左中括號(hào))開(kāi)始,“”(右中括號(hào))結(jié)束值之間使用“,”(逗號(hào))分隔例如: 1, 2, 3, 4, 5, 6, 7, 8, 9 A, B, C, D 值的字符串?dāng)?shù)值truefalsenull對(duì)象數(shù)組字?jǐn)?shù)JSON 解析JSON 數(shù)據(jù)時(shí),首先需要明確待解析的是JSON Object 還是JSON Array,然后再解析JSON Object,name 為名稱,

36、Lili 是name 的值,將name 和Lili 用“:”隔開(kāi),其文本形如:name:Lili/ 新建JSONObject, jsonString 字符串中為上面的JSON 對(duì)象的文本JSONObject demoJson = new JSONObject(jsonString);/ 獲取name 名稱對(duì)應(yīng)的值String s = demoJson.getString(name);解析JSON Array一個(gè)簡(jiǎn)單的JSONArray,number 為數(shù)組名稱,1,2,3為數(shù)組的內(nèi)容,其JSON文本表示如:number:1,2,3/ 新建JSONObject 對(duì)象,將jsonString 字符

37、串轉(zhuǎn)換為JSONObject 對(duì)象/ jsonString 字符串為上面的文本JSONObject demoJson = new JSONObject(jsonString);/ 獲取number 對(duì)應(yīng)的數(shù)組JSONArray numberList = demoJson.getJSONArray(number);/ 分別獲取numberList 中的每個(gè)值for(int i=0; inumberList.length(); i+)/ 因?yàn)閿?shù)組中的類型為int,所以為getInt,其他getString、getLong 具有類似的用法System.out.println(numberList.g

38、etInt(i);使用Vol目的:圖像緩存,請(qǐng)求的調(diào)度特自動(dòng)調(diào)度網(wǎng)絡(luò)請(qǐng)求多個(gè)并發(fā)的網(wǎng)絡(luò)連接通過(guò)使用標(biāo)準(zhǔn)的HTTP緩存機(jī)制保持磁盤(pán)和內(nèi)存響應(yīng)的一致支持請(qǐng)求優(yōu)先級(jí)支持取消請(qǐng)求的強(qiáng)大API,可以取消單個(gè)請(qǐng)求或多個(gè)易于定制健壯性:便于正確的更新UI和獲取數(shù)據(jù)包含調(diào)試和追蹤工具Voll下載Volley構(gòu)建一個(gè)RequestQueueRequestQueue requestQueue=Volley.newRequestQueue(this);/這里的this指的是Context創(chuàng)建一個(gè)Requestprivate final String url=http:/xxxxx/所需url JsonObjectR

39、equest req=new JsonObjectRequest(url,null,new Response.Listener() Override public void onResponse(JsonObject response) , new ResponseError.Listener() Override public void onResponseError(VollerError error) );將req添加到requestQueueGso下載,放入libs目錄/name:name0,age:0Person person = gson.fromJson(str, Person.

40、class);/name:name0,age:0,name:name1,age:5,name:name2,age:10List ps = gson.fromJson(str, new TypeTokenList().getType();實(shí)使用糯米團(tuán)的api接口http:/ errno: 0, msg: success, deals: deal_id: 11078851, image: *, tiny_image: *, title: 漫火鍋, min_title: 漫火鍋100元代金券, description: 王府井店100元代金券!可疊加使用,節(jié)假日通用,提供免費(fèi)WiFi!, market_price: 10000, current_price: 9000, promotion_price: 9000, sale_num: 1159, score: 4.85, comment_num: 26, deal_url: *, deal_murl: * , public class contentbean String deal_id;String image;String tiny_image;String title;String min_title;String description;floa

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論