Android第一行代碼 第10章_第1頁
Android第一行代碼 第10章_第2頁
Android第一行代碼 第10章_第3頁
Android第一行代碼 第10章_第4頁
Android第一行代碼 第10章_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第10章看看精彩的世界,使用網(wǎng)絡(luò)技術(shù)1. Android提供了一個(gè)_控件,借助它可以在應(yīng)用程序里嵌入一個(gè)瀏覽器,從而展示網(wǎng)頁。答:WebView2. 請(qǐng)根據(jù)下面程序中注釋,在空白劃線處填寫代碼。/ 從布局中取得WebView組件R.id.web_viewwebView =(1)_;/ 取得webView對(duì)象的設(shè)置集,設(shè)置為允許運(yùn)行網(wǎng)頁中JavaScript程序(2)_;/ 為webView設(shè)置一個(gè)新建的客戶端(3)_ Override/ 實(shí)現(xiàn)WebViewClient的shouldOverrideUrlLoading(),為WebView對(duì)象接收urlpublic boolean (4)_/

2、根據(jù)傳入的url再去加載網(wǎng)頁view.loadUrl(url);/ 返回true,表示當(dāng)前WebView可以處理打開新網(wǎng)頁的請(qǐng)求,不用借助系統(tǒng)瀏覽器return true;);/ 調(diào)用webView對(duì)象的loadUrl()方法,加載url為“”的網(wǎng)頁(5)_;答:(1)(WebView) findViewById(R.id.web_view)(2)webView.getSettings().setJavaScriptEnabled(true)(3)webView.setWebViewClient(new WebViewClient()(4)shouldOverrideUrlLoading(We

3、bView view, String url)(5)webView.loadUrl("")3. 使用_協(xié)議訪問網(wǎng)絡(luò)可以讓開發(fā)人員完全控制發(fā)送HTTP請(qǐng)求、接收服務(wù)響應(yīng)、解析返回?cái)?shù)據(jù),以及最終顯示內(nèi)容整個(gè)過程。答:HTTP4. Android平臺(tái)開發(fā)HTTP網(wǎng)絡(luò)連接主要有兩個(gè)途徑,即使用由Android SDK自主開發(fā)的HTTP網(wǎng)絡(luò)連接開發(fā)包提供的_類,或使用Apache旗下的開源項(xiàng)目_。答:HttpURLConnectionHttpClient5. HTTP網(wǎng)絡(luò)連接設(shè)置HTTP請(qǐng)求方式,主要有兩個(gè):_和_。答:GETPOST6. 下面是一段HTTP網(wǎng)線連接程序片斷,請(qǐng)認(rèn)真閱

4、讀后說明其編程邏輯。private Handler handler = new Handler() public void handleMessage(Message msg) switch (msg.what) case SHOW_RESPONSE:String response = (String) msg.obj;/ 將收到的網(wǎng)頁字符串response顯示在TextView中responseText.setText(response); private void sendRequestWithHttpClient() new Thread(new Runnable() Overridep

5、ublic void run() try HttpClient httpClient = new DefaultHttpClient();HttpGet httpGet = new HttpGet("");HttpResponse httpResponse = httpClient.execute(httpGet);if (httpResponse.getStatusLine().getStatusCode() = 200) HttpEntity entity = httpResponse.getEntity();String response = EntityUtils.

6、toString(entity, "utf-8");Message message = new Message();message.what = SHOW_RESPONSE;message.obj = response.toString();handler.sendMessage(message); catch (Exception e) e.printStackTrace();).start();答:(1)首先,在UI主線程中創(chuàng)建Handler類對(duì)象handler,并實(shí)現(xiàn)其HandleMessage()方法,讓該方法接收并處理Message消息對(duì)象,根據(jù)消息對(duì)象的what

7、字段判斷出消息來源后,再?gòu)南?duì)象中提取obj字段內(nèi)容,并將內(nèi)容顯示到界面中。(2)另外,程序中還建立一個(gè)進(jìn)行網(wǎng)絡(luò)連接的后臺(tái)線程并啟動(dòng)它;(3)在后臺(tái)線程里,建一個(gè)DefaultHttpClient類的對(duì)象httpClient作為HTTP客戶端對(duì)象;(4)又建一個(gè)HTTP GET請(qǐng)求對(duì)象httpGet,設(shè)置請(qǐng)求網(wǎng)址為“”;(5)接著,調(diào)用httpClient對(duì)象的execute()方法執(zhí)行HTTP GET請(qǐng)求,并將服務(wù)器返回的數(shù)據(jù)保存到HttpResponse類的 httpResponse對(duì)象中;(6)調(diào)用httpResponse對(duì)象的getStatusLine()方法取得狀態(tài)行,再鏈?zhǔn)秸{(diào)用g

8、etStatusCode()從狀態(tài)行取得狀態(tài)碼,如果等于200,那么執(zhí)行下面操作;(7)從httpResponse對(duì)象中取得響應(yīng)實(shí)體并保存到HttpEntity類的entity對(duì)象中,調(diào)用EntityUtils類的靜態(tài)方法toString()將響應(yīng)實(shí)體轉(zhuǎn)換成“utf-8”編碼字符串,并保存到字符串變量response中;(8)建一個(gè)Message類對(duì)象message,將message的what字段值設(shè)置為表示消息來源的常量,再將response對(duì)象轉(zhuǎn)換成字符串并保存到message的obj字段,調(diào)用handler的sendMessage()方法將message對(duì)象發(fā)送給UI主線程。7. 下面是

9、使用HttpURLConnection連接網(wǎng)絡(luò)程序片斷,請(qǐng)根據(jù)注釋提示在空白劃線處填寫相應(yīng)代碼。new Thread(new Runnable() Overridepublic void run() HttpURLConnection connection = null;try / 新建一個(gè)連接到“”的URL類對(duì)象url(1)_;/ 打開url對(duì)象的網(wǎng)絡(luò)連接,并保存到connection(2)_;/ 將connection連接請(qǐng)求方式設(shè)置為GET(3)_;connection.setConnectTimeout(8000);connection.setReadTimeout(8000);con

10、nection.setDoInput(true);connection.setDoOutput(true);/ 取得connection連接的輸入流InputStream對(duì)象,并保存到in中(4)_;BufferedReader reader =(5)_ (/封裝成BufferedReader類對(duì)象reader(6)_);/ 將in轉(zhuǎn)換成InputStreamReader對(duì)象StringBuilder response = new StringBuilder();/ 新建字符串組裝器String line;/ while循環(huán),逐行讀取輸入流中數(shù)據(jù),直到輸入流為null(7)_response.

11、append(line);Message message =(8)_;/ 創(chuàng)建Message類的對(duì)象messagemessage.what = SHOW_RESPONSE;/ 設(shè)置message對(duì)象的發(fā)送者簽名message.obj = response.toString();/ message對(duì)象攜帶的信息(9)_;/ handler對(duì)象發(fā)送message catch (Exception e) e.printStackTrace(); finally if (connection != null) (10)_;/ 斷開connection網(wǎng)絡(luò)連接對(duì)象).start();/ 啟動(dòng)線程答:(1

12、)URL url = new URL("http:/ ")(2)connection = (HttpURLConnection) url.openConnection()(3)connection.setRequestMethod("GET")(4)InputStream in = connection.getInputStream()(5)new BufferedReader(6)new InputStreamReader(in)(7)while (line = reader.readLine() != null)(8)new Message()(9)

13、handler.sendMessage(message)(10)connection.disconnect()8. 在進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)通信時(shí)為了知道收到數(shù)據(jù)的含義,需要雙方事先應(yīng)約定所傳遞數(shù)據(jù)的_,這可以通過規(guī)定_、添加_來實(shí)現(xiàn)。這樣,當(dāng)對(duì)方收到數(shù)據(jù)后就可以按照事先約定數(shù)據(jù)解析,從而提取出需要的內(nèi)容。答:語義數(shù)據(jù)格式語義標(biāo)簽9. 目前,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)時(shí)常用的格式主要有兩種,即:XML和JSON,兩者都以純文本保存或傳遞數(shù)據(jù)。其中_格式在結(jié)構(gòu)化基礎(chǔ)上對(duì)數(shù)據(jù)添加語義標(biāo)簽,從而實(shí)現(xiàn)了語義標(biāo)注,但語義標(biāo)簽也增加了數(shù)據(jù)冗余。答:XML 10. 目前,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)時(shí)常用的格式主要有兩種,即:XML和JS

14、ON,兩者都以純文本保存或傳遞數(shù)據(jù)。其中_格式以結(jié)構(gòu)化方式規(guī)定數(shù)據(jù)語義,不需要專門的語義標(biāo)簽,從而減少了數(shù)據(jù)冗余。答:JSON11. 目前,解析XML數(shù)據(jù)格式主要有兩種模式,其中, _模式的基本思路是將XML文檔看作數(shù)據(jù)流,從頭讀到尾,每當(dāng)XML信息元素出現(xiàn)時(shí)就觸發(fā)相應(yīng)的事件,激活對(duì)應(yīng)的方法進(jìn)行處理。因此,這是種基于事件驅(qū)動(dòng)的模式。答:流(Streaming)12. 目前,解析XML數(shù)據(jù)格式主要有兩種模式,其中, _模式的基本思路是充分考慮了XML文檔具有樹形層次結(jié)構(gòu)的特點(diǎn),將標(biāo)簽和文本等XML元素作為樹的節(jié)點(diǎn)對(duì)象,解析XML文檔的過程就是構(gòu)建文檔對(duì)象樹的過程。答:文檔對(duì)象模型(DOM)13.

15、 基于事件驅(qū)動(dòng)的流模式解析XML主要有兩種形式,其中,_特點(diǎn)是只有當(dāng)應(yīng)用需要處理某種XML信息元素時(shí),才會(huì)調(diào)用XML解析器中的方法去抽取文檔中感興趣的數(shù)據(jù),因此,應(yīng)用是XML信息的主動(dòng)抽取者。 答:Pull Parsing(抽取式解析)14. 基于事件驅(qū)動(dòng)的流模式解析XML主要有兩種形式,其中,_特點(diǎn)是XML解析器將解析出來的XML數(shù)據(jù)主動(dòng)發(fā)送給應(yīng)用,不管應(yīng)用是否準(zhǔn)備接收數(shù)據(jù)。因此,XML解析器是信息主動(dòng)推送者。答:Push Parsing(推送式解析)15. 下面是以Pull方式解析XML文檔程序片斷,請(qǐng)以此為例說明這種解析方式的編程邏輯。private void parseXMLWithP

16、ull(String xmlData) try / 新建一個(gè)XmlPullParserFactory的實(shí)例對(duì)象factory,用于創(chuàng)建XML Pull ParserXmlPullParserFactory factory = XmlPullParserFactory.newInstance();/ 用前面獲得的factory對(duì)象創(chuàng)建一個(gè)XmlPullParser對(duì)象xmlPullParserXmlPullParser xmlPullParser = factory.newPullParser();/ 為xmlPullParser對(duì)象設(shè)置輸入流,輸入流對(duì)象是字符串對(duì)象xmlData得到的Stri

17、ngReader對(duì)象xmlPullParser.setInput(new StringReader(xmlData);/ 從xmlPullParser對(duì)象中取得解析事件類型int eventType = xmlPullParser.getEventType();String id = ""String name = ""String version = ""while (eventType != XmlPullParser.END_DOCUMENT) / 如果事件類型不是文檔結(jié)束,則循環(huán)繼續(xù)/ 當(dāng)前事件是START_TAG、END_T

18、AG,取得當(dāng)前元素名稱,/ 當(dāng)前事件是ENTITY_REF時(shí),返回Entity名稱,否則返回nullString nodeName = xmlPullParser.getName();switch (eventType) / 判斷事件類型case XmlPullParser.START_TAG: / 當(dāng)前事件是開始標(biāo)簽if ("id".equals(nodeName) / 判斷節(jié)點(diǎn)名是否是“id”id = xmlPullParser.nextText();/ 取得開始標(biāo)簽后的文本 else if ("name".equals(nodeName) / 判斷

19、節(jié)點(diǎn)名是否是“name”name = xmlPullParser.nextText();/ 取得開始標(biāo)簽后的文本 else if ("version".equals(nodeName) / 判斷節(jié)點(diǎn)名是否是“version”version = xmlPullParser.nextText();/ 取得開始標(biāo)簽后的文本break;case XmlPullParser.END_TAG: / 當(dāng)前事件是結(jié)束標(biāo)簽if ("app".equals(nodeName) / 判斷節(jié)點(diǎn)名是否是“app”Log.d("MainActivity", &q

20、uot;id is " + id);Log.d("MainActivity", "name is " + name);Log.d("MainActivity", "version is " + version);break;default:break;eventType = xmlPullParser.next();/ 取得下一個(gè)解析事件類型 catch (Exception e) e.printStackTrace();答:(1)首先,獲取一個(gè)XmlPullParserFactory的實(shí)例,并借助這個(gè)實(shí)

21、例得到XmlPullParser對(duì)象:(2)接著,將服務(wù)器返回的XML數(shù)據(jù)作為輸入流傳遞給XmlPullParser的setInput()方法解析;(3)然后,調(diào)用xmlPullParser對(duì)象的getEventType()取得當(dāng)前解析事件,并通過一個(gè)while循環(huán)遍歷XML文檔中各個(gè)解析事件,提取所需數(shù)據(jù)。(4)在while循環(huán)中,循環(huán)結(jié)束的條件是當(dāng)前解析事件為XmlPullParser.END_DOCUMENT,說明解析工作已到文檔結(jié)束位置。調(diào)用next()方法后可以獲取下一個(gè)解析事件,通過getName()方法得到當(dāng)前結(jié)點(diǎn)的名字,如果發(fā)現(xiàn)結(jié)點(diǎn)名符合條件,就調(diào)用nextText()方法來獲

22、取結(jié)點(diǎn)內(nèi)具體的內(nèi)容。16. 簡(jiǎn)要說明SAX模式解析XML的編程邏輯。答:(1)首先,獲取一個(gè)SAXParserFactory的實(shí)例,并借助這個(gè)實(shí)例獲得SAXParser對(duì)象,再取得它的XMLReader對(duì)象;(2)接著,定義一個(gè)SAX解析事件處理器DefaultHandler,再將該SAX事件處理器設(shè)置為XMLReader的解析事件處理器;(3)然后,為XMLReader設(shè)置要解析的輸入數(shù)據(jù)源;(4)在定義繼承自DefaultHandler的SAX解析事件處理器時(shí),通常需要重寫它的五個(gè)事件處理方法,即:在開始XML解析的時(shí)候調(diào)用的startDocument()方法、在開始解析某個(gè)結(jié)點(diǎn)的時(shí)候調(diào)用

23、的startElement()方法、在獲取結(jié)點(diǎn)中內(nèi)容的時(shí)候調(diào)用的characters()方法、在完成解析某個(gè)結(jié)點(diǎn)的時(shí)候調(diào)用的endElement()方法、在完成整個(gè)XML解析的時(shí)候調(diào)用的endDocument()方法,從XML中解析出的數(shù)據(jù)會(huì)以參數(shù)的形式傳入到這些方法中進(jìn)行處理。17. 下面是以SAX方式解析XML文檔程序片斷,請(qǐng)根據(jù)注釋在空白劃線處填寫代碼。private void parseXMLWithSAX(String xmlData) try / 取得一個(gè)SAXParserFactory的實(shí)例對(duì)象factory(1)_;/ 用factory對(duì)象新建SAXParser類對(duì)象,再取得它

24、的XMLReader類對(duì)象xmlReader(2)_; / 創(chuàng)建一個(gè)自定義的SAX事件處理器類ContentHandler()的對(duì)象handler(3)_;/ 將xmlReader的SAX事件處理器設(shè)置為handler(4)_;/ 調(diào)用xmlReader的parse()方法設(shè)置要解析的輸入源(5)_ (new InputSource(new StringReader(xmlData); catch (Exception e) e.printStackTrace();答:(1)SAXParserFactory factory = SAXParserFactory.newInstance()(2)

25、XMLReader xmlReader = factory.newSAXParser().getXMLReader()(3)ContentHandler handler = new ContentHandler()(4)xmlReader.setContentHandler(handler)(5)xmlReader.parse18. _是一種輕量級(jí)的文本數(shù)據(jù)交換格式,全稱是JavaScript 對(duì)象表示法。通過數(shù)據(jù)結(jié)構(gòu)規(guī)定語義,不需要象XML格式中語義標(biāo)簽,因此文檔更小、傳輸更快、解析更易。答:JSON19. _是谷歌提供的解析JSON數(shù)據(jù)的開源庫,可以將一段JSON格式的字符串自動(dòng)映射成一個(gè)對(duì)象,從而不需要再手動(dòng)去編寫代碼進(jìn)行解析了.答:GSON20. 現(xiàn)在有如下程序片斷,請(qǐng)說明程序主要功能并寫出Logcat窗口中Text欄中其運(yùn)行結(jié)果。String jsonData = "id":"5","version":"5.5","name":"Angry Birds", "id":"6","version":"7.0","name":"Clash of

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論