发表于: 2018-10-13 22:09:21
0 793
一、今天完成的事情
提交了任务三。
1.实现身份证真伪的验证,通过调用第三方提供的API,解析返回XML数据,完成验证。
XML的解析方法有很多,这里我用了Pull解析方式,PULL是Android内置的解析器,小巧轻便,解析速度快,简单易用,非常适合在移动设备中使用。
解析如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<message>
<status>0</status>
<value>处理成功</value>
</message>
<policeCheckInfos>
<policeCheckInfo name="xxx" id="0123456789">
<message>
<status>0</status>
<value>查询成功</value>
</message>
<veritem desc="name">xxx</veritem>
<veritem desc="identitycard">9876543210</veritem>
<veritem desc="verify_result_status">3</veritem>
<veritem desc="verify_result_desc">姓名及身份证号一致</veritem>
</policeCheckInfo>
</policeCheckInfos>
</data>
private void parseXMLWithPull(String xmlData) {
String value = "";
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlData));
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String nodeName = xmlPullParser.getName();
switch (eventType) {
case XmlPullParser.START_TAG : {
if ("value".equals(nodeName)) {
value = xmlPullParser.nextText();
}
break;
}
case XmlPullParser.END_TAG :{
if ("message".equals(nodeName)) {
Log.d("解析结果", "value is:" + value);
}
break;
}
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
首先获取一个XmlPullParserFactory实例,通过这个实例得到XmlPullParser对象,然后调用XmlPullParserdesetInpit()方法将XML数据设置进去就可以开始解析了。解析时通过getEventType()可以得到当前的解析事件,然后在while循环中不断进行解析,如果当前解析事件不为
XmlPullParser.END_DOCUMENT时,说明解析还没完成,调用next()方法获取下一个解析事件,继续解析。在while循环中,通过调用getName()方法得到当前节点的名字,如果发现节点名等于value或是其他标签,就调用nextText()方法来获取节点的具体内容。
2.将图片转为Base64编码
public static String imageToBase64 (String path) {
if (TextUtils.isEmpty(path)) {
return null;
}
InputStream inputStream = null;
byte[] data = null;
String result = null;
try {
inputStream = new FileInputStream(path);
data = new byte[inputStream.available()];
inputStream.read(data);
//用默认的编码格式进行编码
result = Base64.encodeToString(data,Base64.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
二、明天计划的事情
1.回顾一下之前所学的内容,作一个总结;
2.为任务四做一些准备。
三、遇到的问题
多层嵌套XML的解析方法不太明白
四、收获
提交了任务三,实现了与服务器的简单交互。
评论