刚开始学习安卓,跟着郭霖大大的《第一行代码》,开始慢慢打开安卓这扇大门。一路看下来,看到不会的就在网上搜资料,或者看官方的reference,基本还是蛮顺利的。不过遇到问题自己想办法解决的确很好,然而总觉得好像缺点什么,所以打算开始记录下自己学习过程中遇到的一些问题,加深一下印象。如果有人和我遇到过同样的问题,看了我的文章,能帮到大家当然更好啦。
常用的解析XML数据的方式有Pull解析和SAX解析,Pull解析主要借助了XmlPullParser对象,而SAX解析则通过继承DefaultHandler类。
首先是Pull解析:
XmlPullParserFactory factory=XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser=factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmlData));得到一个XmlPullParser对象后就可以通过getName()方法得到节点名,再通过循环进行解析。
SAX解析也很简单,通过复写DefaultHandler类中的五个方法来解析:
public void startDocument() throws SAXException {} public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{} public void characters(char[] ch, int start, int length) throws SAXException{} public void endElement(String uri, String localName, String qName) throws SAXException{} public void endDocument() throws SAXException{}之后通过XMLParserFactory得到XMLReader的实例:
SAXParserFactory factory = SAXParserFactory.newInstance(); XMLReader xmlReader = factory.newSAXParser().getXMLReader();
再将继承自DefaultHandler类的ContentHandler实例设置到XMLReader中,并通过InputSource类开始执行解析:
xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(new StringReader(xmlData)));
首先来看下如何用JSONObject解析吧:
第一步把JSON字符串转换为JSONArray:
JSONArray jsonArray = new JSONArray(jsonData);
然后通过getJSONObject()方法把JSONArray中的内容循环读取出来就行了:
for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String id = jsonObject.getString("id"); String name = jsonObject.getString("name"); String version = jsonObject.getString("version"); }这里我的JSON数据中每条数据只有三个属性。
最后是用GSON解析JSON数据,jar包下载下来之后复制到libs下,然后修改下gradle文件同步后就能导入了,使用起来非常简单:
Gson gson=new Gson(); List<App> appList=gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());没错,只要两行代码就行了,声明Gson对象,然后通过fromJson()方法获得一个JSON文件的List<>对象就行了,具体使用可以看 GSON api文档。原理很简单,它可以将一段JSON格式的字符串自动映射成一个对象,所以就不需要你手动编写代码来解析了,不过需要你根据JSON数据定义一个类,和Gson类映射出来的对象对应上。
好了,以上就是XML解析与JSON解析的要点了,想要熟练掌握当然还是要多看api文档、多用才行。接下来再说说我遇到的问题吧。由于我使用的是windows平台,布置Apache服务器比较麻烦,不过最后找到一个比较方便的途径,通过XAMPP,直接安装好就能用了,而且还可以选择部署tomcat、php、MySql。
部署好Apache服务器后还有一个连接的问题,由于我是用真机测试的,所以就不能像模拟器那样用10.0.2.2来连接了,而是要通过局域网的IP地址,然而手头并没有路由器,所以最后想了个办法,通过笔记本开启一个虚拟WiFi,然后手机连接这个WiFi并更改URL为本机的IP地址,这样问题就顺利的解决了!