• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Android調用Web應用淺析

    2015-11-14 20:21:00龍軍楊鵬
    電腦知識與技術 2015年22期

    龍軍 楊鵬

    摘要:該文主要研究Android訪問JSP、ASP.NET等不同Web應用的方法及解決方案,分析了URL、HttpClient、HttpURLConnection網絡應用的技術,對XML、JOSN數據的解析進行了比較,就asp.net、jsp和Web Service的應用資源生成、調用提出了解決方案。

    關鍵詞:Android;XML;JOSN;Web Service

    中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2015)22-0140-03

    通過長期的信息化建設,基于互聯網的Web應用已非常豐富,積累了大量的數據和資源,隨著移動智能設備的普及,App應用大量涌現,APP的設計與制作不再是專業(yè)公司的專利,眾多的企事業(yè)單位將原有系統(tǒng)進行APP化拓展已是大勢所趨。將這些用不同語言編寫、使用不同數據庫的資源融入企業(yè)的APP應用中就是本文探討的主題。

    1 Android訪問Web應用資源的主要途徑

    1.1 通過URL進行網絡應用

    URL統(tǒng)一資源定位器是指向互聯網資源的指針,由協(xié)議名、主機、端口和資源組成:protocol://host:port/resourceName。常用方法有:獲取URL資源名getFile()、獲取URL查詢字符串getQuery()、返回URL遠程連接的URLConnection對象openConnection()、打開URL連接并返回其輸入流openStream()等。

    無參數直接用URL訪問網絡資源時openStream()方法讀取指定資源并生成InputStream流,在本地對該輸入流進行讀取,如while(InputStream對象.read(byte[]數組對象)>=0){}將輸入流讀到字節(jié)數組中。

    當提交參數時,則用URL的openConnection()方法返回的URLConnection對象(示例中的conn),建立起應用與URL間的通信連接,通過其實例發(fā)送請求并讀取相關資源。發(fā)送GET方式請求時用connect()建立連接;發(fā)送POST方式請求時,取得URLConnection對象的輸出流再發(fā)送請求參數。

    1.2 使用Http訪問網絡

    (1) 使用Apache HttpClient

    為更好處理如Session、Cookie等,在Android中可用HttpPost和HttpGet封裝post請求和get請求,用HttpClient的excute()方法發(fā)送post請求并返回服務器的響應數據。用HttpResponse的getAllHeaders()、getHeaders(String name)等方法獲取服務器的響應頭,用getEntity()方法獲取HttpEntity對象,該對象包裝了服務器的響應內容,程序通過該對象獲取服務器的響應內容。

    2 Android訪問Web應用資源需解決的主要問題

    2.1 中文亂碼現象

    網絡通信中產生亂碼的主要原因是編碼不一致,多數終端設備都支持UTF-8字符集,而Java網絡傳輸使用ISO-8859-1,調用資源時,可用EntityUtils.toString(數據,"編碼")進行傳輸,也可用getBytes("編碼")對漢字編碼得到字節(jié)數組,再用new String(Bytes[],”解碼”)對字節(jié)數組解碼。

    2.2 用DOM、SAX、Pull三種方式解析XML

    1) DOM解析先將XML文件內容以文檔樹的方式存入內存,通過API遍歷樹、檢索數據,簡單易用,占內存多,用于數據量小的文件。DOM解析常用屬性:元素Element、節(jié)點Node、節(jié)點名稱nodeName、節(jié)點值nodeValue、屬性attributes;常用方法:獲取所有元素getDocumentElement()、獲取指定標簽的所有元素getElementsByTagName(name)、插入子節(jié)點appendChild(node)等。

    2) SAX解析基于回調函數,速度快占用內存少,讀取到開始或結束標簽、節(jié)點、內容時就回調一個事件,事件源通過XMLReader的parser()方法解析并產生事件,事件處理器由ContentHander等4個接口集合而成,一般可用DefaultHandler類進行簡化處理。

    使用時創(chuàng)建SAXParserFactory對象,調用newSAXParser()方法生成SAXParser解析器,用getXMLReader()方法獲得解析器的事件源對象XMLReader,實例化一個DeafultHandler對象,用setContentHandler將兩者連接,通過XMLReader的parse()方法從輸入源得到XML數據,最終由DefaultHandler對象返回數據。

    3) Pull解析與SAX類似,也是基于回調,Pull回調時返回數字,操作更為便捷,通過parser.next()方法即可進入下一元素并觸發(fā)事件。

    2.3 用JSON進行數據交換

    JSON是輕量級的數據交換語言,用編程語言對JSON對象進行生成和解析,實現數據交換。JSON和XML均有相同的數據可讀性和豐富的解析手段,但JSON相較XML數據體積小、與JavaScript交互更方便、速度快,但JSON的數據描述性差。

    JSONObject是JSON定義的基本單元,由健-值對構成,外部調用返回一個{?。褐祡字符串,內部用put(健,值)方法添加數值;JSONStringer創(chuàng)建JSON text;JSONArray值為數組,toString()輸出時,值用逗號","隔開放在一對中括號內;JSONTokener是 JSON文本解析類,用Object nextValue()將JSON文本解析為對象。

    JSONObject、JSONArray構建json文本時,先創(chuàng)建JSONObject對象,put()方法向里面加入數據,若添加同類型多數據,可創(chuàng)建JSONArray對象,將數據加入JSONArray對象后再加入JSONObject對象,也可將JSONObject對象加入另一JSONObject對象。獲取時用getType("關鍵字")或optType("關鍵字")獲取鍵的值并轉換為指定類型。JSONStringer構建json文本時object和endObject配對使用,分別設置健和值,值為數組時要求array和endArray配對使用。

    解析一條記錄的Json時,創(chuàng)建JSONObject對象,用map.put("鍵",jsonObj.getType("鍵"))將數據加入Map對象。解析多條記錄的Json,創(chuàng)建JSONArray對象,進行遍歷,用((JSONObject)jsonObjs.opt(索引)) .getJSONObject("singer")獲得當前記錄對象,再取內容。

    3 Android調用Asp.net應用的解決方案

    制作被手機調用Asp.net頁面,設置網頁的Request和Response的ContentEncoding編碼為utf-8,用Request.Params["鍵"]得到傳入參數后,獲得要返回的數據內容,進行Xml處理后轉換為字符串返回。

    Android應用中首先將網址編碼由utf-8轉為ISO-8859-1,在將要傳遞的參數加入Map對象后生成List,與網址一起Post提交,獲得返回的數據,并進行XML解析體現。

    4 Android調用Jsp應用的解決方案

    Web端用jsp實現時,根據提交的參數取得數據并轉換為XML格式,參數要用String(參數getBytes("iso-8859-1"),"utf-8")進行轉碼后再提交,獲得的內容可用DOM、SAX、JDOM、DOM4J等方式解析,若獲得的數據內容簡單,可直接用字符串的形式加入XML標簽生成,將生成的字符串由utf-8轉為iso-8859-1編碼輸出。Android應用同上。

    5 Android調用Web Service的解決方案

    Web Service是發(fā)布在互聯網上的一種完成特定需求的在線應用服務,基于XML和HTTPS,通信協(xié)議主要基于SOAP、用WSDL進行服務描述,通過UDDI來發(fā)現和獲取服務。Web Service可以用C#、Java、PHP等任何語言編寫,最后返回XML類型的數據??捎筛鞣N平臺的應用進行交互,與RMI、CORBA等遠程調用技術相比,Web Service跨平臺、跨語言的特點使其應用廣泛,但性能略低。

    Android沒有WebService相關的庫,一種是通過加載XML格式的SOAP協(xié)議數據,把該數據與要提交的參數封裝成實體并通過HTTP請求發(fā)送給WebService服務器,獲得Web Service服務器返回的XML數據并進行解析。更常用的是采用ksoap2第三方包的方式,用SoapObject(WebService名稱空間,方法名)創(chuàng)建SoapObject對象后,通過addProperty()增加要提交的參數,創(chuàng)建SoapSerializationEnvelope對象并指定其bodyOut屬性為SoapObject對象實例,調用HttpTransport對象的call(完整的方法路徑, SoapSerializationEnvelope對象)連接到指定WebService方法,通過getResponse()即可獲得返回的數據。

    針對目前眾多已建有Web應用或網站的單位,在進行APP應用開發(fā)過程中,為利用現有的資源,可根據原有的平臺制作相應的Web頁面,將原不同語言、不同平臺的的應用系統(tǒng)綜合到統(tǒng)一的APP應用中,并結合互聯網+的發(fā)展趨勢,拓展新的功能和業(yè)態(tài),實現資源的充分利用。

    參考文獻:

    [1] 龍軍. Android技術核心與應用開發(fā)[M].南海出版公司,2014.

    [2] 姜文波,龍軍. Android平臺的套接字應用淺析[J].科技信息,2014(9).

    [3] 龍軍. 基于Java語言的流式套接字編程探析[J].電腦知識與技術,2013,9(10).

    [4] 翟大昆. Android項目開發(fā)詳解[M]. 北京:機械工業(yè)出版社,2012.

    [5] 王小科. ASP.NET程序開發(fā)范例寶典[M].北京:人民郵電出版社,2012.

    平塘县| 上林县| 民和| 上高县| 柘城县| 遂溪县| 台中市| 石楼县| 太仆寺旗| 扬州市| 中宁县| 逊克县| 开平市| 奎屯市| 乐至县| 古蔺县| 鹰潭市| 平安县| 保定市| 连平县| 阿勒泰市| 阿图什市| 英吉沙县| 福安市| 司法| 鄯善县| 通化市| 南通市| 永宁县| 岑溪市| 屏东市| 论坛| 淮阳县| 福泉市| 涟水县| 武安市| 台东市| 抚顺市| 兰西县| 大城县| 来凤县|