龍軍 楊鵬
摘要:該文主要研究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
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.