发表于: 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的解析方法不太明白


四、收获

        提交了任务三,实现了与服务器的简单交互。




返回列表 返回列表
评论

    分享到