Android笔记----对服务器XML以及JSON数据的简单解析
2016-09-26 08:47
841 查看
服务器搭建
Apache官网最新版Apache HTTP Server 2.4安装方法已经不是傻瓜式的下一步,需要解压完成后进行手动配置相关路径和端口信息,昨天由于端口冲突问题折腾了挺长时间终于搞定了.
最终设置本地ip(localhost)+端口号作为服务器主站,相对应的数据文件也是放在这里面
丢入test.xml以及testjson.json作为测试.
简单思路摘要:
XML
通过HttpClient获取网址中xml文件的数据,再Pull方式解析服务器返回的数据.
JSON
JSON的解析相对清晰,直接把数据返回到JSONArray对象, 并对改对象每个元素的成员调用getString()取出.
But Talk is cheap, show me the code…
新建AndroidProject
1.先在AndroidManifest声明权限
2.布局相对简单,只是个按钮监听实现:
在onClick里面回调即可
具体函数
XML
网站下的test.xml内容为:
解析的时候是按每个结点(app)进行解析的 ,类似于文件读取操作,遇到结点就判断是否到达文件尾,如果否,则next(app)
解析结果:
JSON
test_json.json内容为:
JSON格式数据体积小,但是.json可读性差,可以借助辅助工具
http://www.bejson.com/ 在线解析
这样比较清晰
JSON的解析相对清晰,直接把数据返回到JSONArray对象, 并循环遍历JSONArray对象,对该对象每个元素的成员(id,name,version)调用getString()取出.
解析结果我们通过logcat输出:
GSON解析JSON,相对更加方便
Eclipse 平台,
下载GSON的压缩包 解压得到gson-2.2.4
Step 1 在项目的lib导入gson-2.2.4
Step 2 新建类 Data_GSON
以上方法同样可以成功解析,代码和上面的JSONArray方法大同小异,关键地方在于
此处解析JSON数据只需要通过自定义的类Data_GSON来进行识别
其实GSON库是将JSON字符串映射成对象,然后匹配相应的成员变量进行获取.
程序来源<第一行代码>
Apache官网最新版Apache HTTP Server 2.4安装方法已经不是傻瓜式的下一步,需要解压完成后进行手动配置相关路径和端口信息,昨天由于端口冲突问题折腾了挺长时间终于搞定了.
最终设置本地ip(localhost)+端口号作为服务器主站,相对应的数据文件也是放在这里面
丢入test.xml以及testjson.json作为测试.
简单思路摘要:
XML
通过HttpClient获取网址中xml文件的数据,再Pull方式解析服务器返回的数据.
JSON
JSON的解析相对清晰,直接把数据返回到JSONArray对象, 并对改对象每个元素的成员调用getString()取出.
But Talk is cheap, show me the code…
新建AndroidProject
1.先在AndroidManifest声明权限
<uses-permission android:name="android.permission.INTERNET" />
2.布局相对简单,只是个按钮监听实现:
在onClick里面回调即可
//解析xml sendRequestWithHttpURLConnection_xml(); //JSONArray 解析json sendRequestWithHttpURLConnection_json(); // GSON解析JSON sendRequestWithHttpURLConnection_GSON();
具体函数
XML
网站下的test.xml内容为:
<apps> <app> <id>626995617</id> <name>Dh</name> <version>1.0</version> </app> <app> <id>2</id> <name>kb</name> <version>2.0</version> </app> <app> <id>3</id> <name>lj</name> <version>3.0</version> </app> </apps>
解析的时候是按每个结点(app)进行解析的 ,类似于文件读取操作,遇到结点就判断是否到达文件尾,如果否,则next(app)
public void sendRequestWithHttpURLConnection_xml() { new Thread(new Runnable() { @Override public void run() { try{ Log.d(TAG,"run"); HttpClient httpClient = new DefaultHttpClient(); //指定地址 HttpGet httpGet = new HttpGet("http://10.15.27.157:8080/test.xml"); HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { Log.d(TAG,"success"); //请求响应成功 HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity,"utf-8"); parseXMLWithPull(response); } }catch(Exception e){ e.printStackTrace(); } } }).start(); } private void parseXMLWithPull(String xmlData) { try { Log.d(TAG,"parseXMLWithPull"); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmlData)); int eventType = xmlPullParser.getEventType(); String id = ""; String name = ""; String version = ""; while (eventType != XmlPullParser.END_DOCUMENT) { //xml未到文件末尾 String nodeNameString = xmlPullParser.getName(); switch (eventType) { case XmlPullParser.START_TAG:{ if ("id".equals(nodeNameString)) { id = xmlPullParser.nextText(); }else if ("name".equals(nodeNameString)){ name = xmlPullParser.nextText(); }else if ("version".equals(nodeNameString)){ version = xmlPullParser.nextText(); } break; } case XmlPullParser.END_TAG:{ if ("app".equals(nodeNameString)) { Log.d(TAG,"id is "+id); Log.d(TAG,"name is "+name); Log.d(TAG,"Version is "+version); } break; } default : break; } eventType = xmlPullParser.next(); } } catch (Exception e) { e.printStackTrace(); } }
解析结果:
JSON
test_json.json内容为:
[ { "id":"5","version":"5.5","name":"AG" }, { "id":"6","version":"6.0","name":"Six" }, { "id":"7","version":"7.0","name":"Seven" } ]
JSON格式数据体积小,但是.json可读性差,可以借助辅助工具
http://www.bejson.com/ 在线解析
这样比较清晰
JSON的解析相对清晰,直接把数据返回到JSONArray对象, 并循环遍历JSONArray对象,对该对象每个元素的成员(id,name,version)调用getString()取出.
private void sendRequestWithHttpURLConnection_json() { new Thread(new Runnable() { @Override public void run() { try{ Log.d(TAG,"run"); HttpClient httpClient = new DefaultHttpClient(); //指定地址 HttpGet httpGet = new HttpGet("http://10.15.27.157:8080/test_json.json"); HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { Log.d(TAG,"success"); //请求响应成功 HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity,"utf-8"); parseJSONWithJSONObject(response); } }catch(Exception e){ e.printStackTrace(); } } }).start(); } private void parseJSONWithJSONObject(String jsonData) { try { JSONArray jsonArray = new JSONArray(jsonData); 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"); Log.d(TAG,"id is "+id); Log.d(TAG,"name is "+name); Log.d(TAG,"Version is "+version); } } catch (Exception e) { e.printStackTrace(); } }
解析结果我们通过logcat输出:
GSON解析JSON,相对更加方便
Eclipse 平台,
下载GSON的压缩包 解压得到gson-2.2.4
Step 1 在项目的lib导入gson-2.2.4
Step 2 新建类 Data_GSON
// GSON解析JSON private void sendRequestWithHttpURLConnection_GSON() { new Thread(new Runnable() { @Override public void run() { try{ Log.d(TAG,"GSON解析"); HttpClient httpClient = new DefaultHttpClient(); //指定地址 HttpGet httpGet = new HttpGet("http://10.15.27.157:8080/test_json.json"); HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { Log.d(TAG,"success"); //请求响应成功 HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity,"utf-8"); parseJSONWithG(response); } }catch(Exception e){ e.printStackTrace(); } } }).start(); } private void parseJSONWithG(String jsonData) { Gson gson = new Gson(); List<Data_GSON>appList = gson.fromJson(jsonData, new TypeToken<List<Data_GSON>>(){}.getType()); for (Data_GSON data_GSON : appList) { Log.d(TAG,"id is "+ data_GSON.getId()); Log.d(TAG,"name is "+ data_GSON.getName()); Log.d(TAG,"Version is "+ data_GSON.getVersion()); } }
以上方法同样可以成功解析,代码和上面的JSONArray方法大同小异,关键地方在于
此处解析JSON数据只需要通过自定义的类Data_GSON来进行识别
其实GSON库是将JSON字符串映射成对象,然后匹配相应的成员变量进行获取.
//对JSON数组的统一 Gson gson = new Gson(); List<Data_GSON>appList = gson.fromJson(jsonData, new TypeToken<List<Data_GSON>>(){}.getType());
程序来源<第一行代码>
相关文章推荐
- android访问服务器并解析返回的XML和JSON数据
- android 解析服务器数据使用json还是xml方式
- android解析xml和json数据(获取本地服务器数据)
- android 解析服务器数据使用json还是xml方式
- Android JSON数据格式的解析,与简单对象、带泛型的List和Map的转换,以及GSON的使用
- android之json数据和xml数据的回传和解析
- Android 解析网络数据传输JSON或XML对象
- Android入门学习笔记(一)|基础知识|文件数据存储读取|解析XML
- Android 获取Google Weather API 并通过Xml和JSON解析数据
- 在 Android 应用程序中使用 Internet 数据 解析 XML、JSON 和 protocol buffers 数据
- Android 解析后台返回为Json数据的简单例子
- Android : JSON存取数据 以及 DOM读取XML数据
- Android笔记之Json数据解析
- Android访问网络系列之--服务端返回XML或JSON格式数据,Android 进行解析并显示
- android客户端与php服务器的json数据简单交互(二)
- Android 解析后台返回为Json数据的简单例子
- android网络编程之json传输数据以及解析方式
- android笔记--JSON数据解析
- Android 解析后台返回为Json数据的简单例子!!!
- Android访问网络系列之--服务端返回XML或JSON格式数据,Android 进行解析并显示