安卓实训第十二天---xml解析PULL解析的实现,安卓测试,logcat的使用方法

来源:互联网 发布:诚殷网络web渗透培训 编辑:程序博客网 时间:2024/05/17 07:00

Pull 解析器:

Pull 解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如: 开始元素和结束元素事件,使用xmlPullParser.next() 可以进入下一个元素并触发相应事件。跟 SAX 不同的 是, Pull 解析器产生的事件是一个数字,而非方法,因此可以使用一个 switch 对事件进行处理。当元素开始解析时,调用 parser.nextText() 方法可以获取下一个 Text 类型节点的值。

Pull解析器的源码及文档下载网址:http://www.xmlpull.org/

解析步骤:

1.直接创建出XmlPullParser解析对象
2.设置解析文件输入流并且指定输入流在操作的编码方式
3.获取解析文件时返回的eventType时间类型
4.while循环遍历到文档结尾
5.使用xmlPullParser.next()进入下一个元素并触发
6.switch语句循环遍历结果 
7.在标签结束时,进行添加到集合中
8.释放资源
Xml.newPullParser()--->setInput-->getEventType()--->while(type!=XmlPullParser.END_DOCUMENT)-->case type  --> parser.getName()去判断---->获得的信息添加进对象--->type = parser.next();指针下移
解析工具类:
解析工具类PullXml.java[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片package com.example.util;    import java.util.ArrayList;  import java.util.List;    import org.xmlpull.v1.XmlPullParser;    import android.util.Xml;    import com.example.domain.City;    public class PullXml {      public List<City> pullXml() {          List<City> entities = null;          City currentCity = null;          // 1.直接创建出XmlPullParser解析对象           XmlPullParser xmlPullParser = Xml.newPullParser();          try {              // 2.设置解析文件输入流并且指定输入流在操作的编码方式               xmlPullParser.setInput(getClass().getClassLoader()                      .getResourceAsStream("china.xml"), "UTF-8");                // 3.获取解析文件时返回的eventType时间类型               int eventType = xmlPullParser.getEventType();                // while循环遍历到文档结尾               while (eventType != XmlPullParser.END_DOCUMENT) {                  switch (eventType) {                  case XmlPullParser.START_DOCUMENT:                      entities = new ArrayList<City>();                      break;                  case XmlPullParser.END_DOCUMENT:                        break;                  case XmlPullParser.START_TAG:                        String name = xmlPullParser.getName();                      if (name.equals("city")) {                          // 声明当前的city对象                           currentCity = new City();                          int count = xmlPullParser.getAttributeCount();                          if (count > 0) {                              /*                              * cityname="北京" pyName="beijing" quName="北京"                              * state1="1" state2="1" stateDetailed="多云"                              * tem1="30" tem2="19" windState="西北风5-6级"                              */                              currentCity.setCityname(xmlPullParser                                      .getAttributeValue(null, "cityname"));                              currentCity.setPyName(xmlPullParser                                      .getAttributeValue(null, "pyname"));                              currentCity.setQuName(xmlPullParser                                      .getAttributeValue(null, "quname"));                              currentCity.setState1(xmlPullParser                                      .getAttributeValue(null, "state1"));                              currentCity.setState2(xmlPullParser                                      .getAttributeValue(null, "state2"));                              currentCity.setStateDetailed(xmlPullParser                                      .getAttributeValue(null, "stateDetailed"));                              currentCity.setTem1(xmlPullParser                                      .getAttributeValue(null, "tem1"));                              currentCity.setTem2(xmlPullParser                                      .getAttributeValue(null, "tem2"));                              currentCity.setWindState(xmlPullParser                                      .getAttributeValue(null, "windState"));                          }                        } else if (currentCity != null) {                          /*                          * <cityname>河南</cityname> <pyName>henan</pyName>                          * <quName>河南</quName> <state1>1</state1>                          * <state2>1</state2>                          * <stateDetailed>多云转晴</stateDetailed> <tem1>38</tem1>                          * <tem2>-1</tem2> <windState>东南风2-3级</windState>                          */                          if (name.equalsIgnoreCase("cityname")) {                              currentCity.setCityname(xmlPullParser.nextText());                          } else if (name.equalsIgnoreCase("pyName")) {                              currentCity.setPyName(xmlPullParser.nextText());                          } else if (name.equalsIgnoreCase("quName")) {                              currentCity.setQuName(xmlPullParser.nextText());                          } else if (name.equalsIgnoreCase("state1")) {                              currentCity.setState1(xmlPullParser.nextText());                          } else if (name.equalsIgnoreCase("state2")) {                              currentCity.setState2(xmlPullParser.nextText());                          } else if (name.equalsIgnoreCase("stateDetailed")) {                              currentCity.setStateDetailed(xmlPullParser                                      .nextText());                          } else if (name.equalsIgnoreCase("tem1")) {                              currentCity.setTem1(xmlPullParser.nextText());                          } else if (name.equalsIgnoreCase("tem2")) {                              currentCity.setTem2(xmlPullParser.nextText());                          } else if (name.equalsIgnoreCase("windState")) {                              currentCity.setWindState(xmlPullParser.nextText());                          }                        }                      break;                  case XmlPullParser.END_TAG:                        String names = xmlPullParser.getName();                      // 在标签结束时,进行添加到集合中                       if (xmlPullParser.getName().equalsIgnoreCase("city")                              && currentCity != null) {                          // 添加到集合中                           entities.add(currentCity);                          //释放资源                           currentCity = null;                      }                      break;                    default:                      break;                  }                    // 使用xmlPullParser.next()进入下一个元素并触发                   eventType = xmlPullParser.next();              }          } catch (Exception e) {              e.printStackTrace();          }            return entities;      }  }  

二、安卓测试(转自赵雅智的博客:)

测试概念

从是否关心软件内部结构和具体实现的角度划分

  黑盒测试:只关心程序执行的过程和结果
  白盒测试:根据源代码写测试方法或者测试用例
  灰盒测试:是介于白盒测试与黑盒测试之间的

从软件开发的过程按阶段划分有

A.单元测试
B.集成测试
C.确认测试
D.系统测试
E.验收测试
F.回归测试
G.Alpha测试

新建测试项目测试

新建测试项目





新建测试类






在本类创建测试类

新建测试类继承AndroidTestCase类

配置测试设备和类库

配置测试设备

配置类库




AndroidManifest.xml解析


targetPackage指定的包要和应用的package相同



运行测试类




测试成功和测试失败
测试成功:


测试失败:

三、logcat的解析(复制于赵雅智的博客,以便利于复习):

一个android应用程序运行后 并不会在控制台内输出任何信息. 不能在控制台输出。但是android提供的Log类。

android.util.Log常用的方法有以下5个:Log.v() ,Log.d() ,Log.i() ,Log.w() ,Log.e() 。按照日志级别从高到低为ERROR, WARN, INFO, DEBUG, VERBOSE.


5种日志级别的输出介绍:

 1Log.v  的输出颜色为黑色,输出大于或等于VERBOSE日志级别的信息

 2Log.d  的输出颜色为蓝色,输出大于或等于DEBUG日志级别的信息

 3Log.i   的输出为绿色,输出大于或等于INFO日志级别的信息

 4Log.w 的输出为橙色输出大于或等于WARN日志级别的信息

 5Log.e  的输出为红色,仅输出ERROR日志级别的信息.



在logcat中对应的log输出类型也就是上图所示

log示例

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. package com.example.android_pull;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.View;  
  7.   
  8. public class MainActivity extends Activity {  
  9.   
  10.     private static final String TAG = "MainActivity";  
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.activity_main);  
  15.     }  
  16.   
  17.      public void logTest(View v){  
  18.          Log.v(TAG,"------------------verbose---------------------");  
  19.          Log.d(TAG,"------------------debug---------------------");  
  20.          Log.i(TAG,"------------------info---------------------");  
  21.          Log.w(TAG,"------------------warn---------------------");  
  22.          Log.e(TAG,"------------------error---------------------");  
  23.      }  
  24. }  

输出结果:


我们可以根据定义的TAG在控制台添加过过滤器



0 0
原创粉丝点击