您的位置:首页 > 其它

安卓实训第十二天---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在控制台添加过过滤器





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: