安卓实训第十二天---xml解析PULL解析的实现,安卓测试,logcat的使用方法
2014-06-05 20:44
585 查看
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种日志级别的输出介绍:
1、Log.v 的输出颜色为黑色,输出大于或等于VERBOSE日志级别的信息2、Log.d 的输出颜色为蓝色,输出大于或等于DEBUG日志级别的信息
3、Log.i 的输出为绿色,输出大于或等于INFO日志级别的信息
4、Log.w 的输出为橙色, 输出大于或等于WARN日志级别的信息
5、Log.e 的输出为红色,仅输出ERROR日志级别的信息.
在logcat中对应的log输出类型也就是上图所示
log示例
[java]view plaincopyprint?
package com.example.android_pull;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void logTest(View v){
Log.v(TAG,"------------------verbose---------------------");
Log.d(TAG,"------------------debug---------------------");
Log.i(TAG,"------------------info---------------------");
Log.w(TAG,"------------------warn---------------------");
Log.e(TAG,"------------------error---------------------");
}
}
package com.example.android_pull; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void logTest(View v){ Log.v(TAG,"------------------verbose---------------------"); Log.d(TAG,"------------------debug---------------------"); Log.i(TAG,"------------------info---------------------"); Log.w(TAG,"------------------warn---------------------"); Log.e(TAG,"------------------error---------------------"); } }
输出结果:
我们可以根据定义的TAG在控制台添加过过滤器
相关文章推荐
- 安卓中使用XmlPullParser解析xml文件
- java中采用集合使用pull解析xml文件格式的方法
- 安卓使用DOM,SAX,PULL解析xml,安卓写入xml文件
- 使用Xml类下的newPullParser ()、newSerializer ()方法,解析xml数据和序列化生成xml数据
- Android程序解析XML文件的方法及使用PULL解析XML案例
- 使用pull方法解析Xml文件(省市县Xml)
- 使用DOM方法实现xml文档内容的解析与写入
- Android程序解析XML文件的方法及使用PULL解析XML案例
- 使用go语言解析xml的实现方法(必看篇)
- Android pull解析xml的实现方法
- 安卓使用sax、dom、pull解析xml
- 关于使用FlexBuilder开发时对xml解析方法
- Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
- 使用Dom4j实现对XML文档的解析
- android中的三种xml解析方法---sax解析,pull解析,dom
- Php Xml解析之DOMDocument使用方法浅解
- android中使用SAX, DOM, 或者pull 来解析XML文档
- android 使用 pull 解析xml文件
- android_xml解析之 使用PULL读取XML文件 .
- bak 6.android xml解析 XmlPullParser的使用.