android textview参差不齐,解决安卓TextView异常换行,参差不齐等问题

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();指针下移

实例代码:

资源文件china.xml

cityname="江苏"

pyName="jiangsu"

quName="江苏"

state1="1"

state2="1"

stateDetailed="多云"

tem1="24"

tem2="19"

windState="西北风3-4级" />

cityname="北京"

pyName="beijing"

quName="北京"

state1="1"

state2="1"

stateDetailed="多云"

tem1="30"

tem2="19"

windState="西北风5-6级" />

河南

henan

河南

1

1

多云转晴

38

-1

东南风2-3级

实体类City.java

package com.example.domain;

public class City {

private String cityname;

private String pyName;

private String quName;

private String state1;

private String state2;

@Override

public String toString() {

return "City [cityname=" + cityname + ", pyName=" + pyName

+ ", quName=" + quName + ", state1=" + state1 + ", state2="

+ state2 + ", stateDetailed=" + stateDetailed + ", tem1="

+ tem1 + ", tem2=" + tem2 + ", windState=" + windState + "]";

}

private String stateDetailed;

private String tem1;

private String tem2;

private String windState;

public String getCityname() {

return cityname;

}

public City() {

super();

}

public void setCityname(String cityname) {

this.cityname = cityname;

}

public String getPyName() {

return pyName;

}

public void setPyName(String pyName) {

this.pyName = pyName;

}

public String getQuName() {

return quName;

}

public void setQuName(String quName) {

this.quName = quName;

}

public String getState1() {

return state1;

}

public void setState1(String state1) {

this.state1 = state1;

}

public String getState2() {

return state2;

}

public void setState2(String state2) {

this.state2 = state2;

}

public String getStateDetailed() {

return stateDetailed;

}

public void setStateDetailed(String stateDetailed) {

this.stateDetailed = stateDetailed;

}

public String getTem1() {

return tem1;

}

public void setTem1(String tem1) {

this.tem1 = tem1;

}

public String getTem2() {

return tem2;

}

public void setTem2(String tem2) {

this.tem2 = tem2;

}

public String getWindState() {

return windState;

}

public void setWindState(String windState) {

this.windState = windState;

}

public City(String cityname, String pyName, String quName, String state1,

String state2, String stateDetailed, String tem1, String tem2,

String windState) {

super();

this.cityname = cityname;

this.pyName = pyName;

this.quName = quName;

this.state1 = state1;

this.state2 = state2;

this.stateDetailed = stateDetailed;

this.tem1 = tem1;

this.tem2 = tem2;

this.windState = windState;

}

}

解析工具类PullXml.java

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 pullXml() {

List 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();

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) {

/*

* 河南henan

* 河南1

* 1

* 多云转晴38

* -1东南风2-3级

*/

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;

}

}

运行结果

用上篇讲解的测试方法测试程序结果 :

05c92714b5da37c95262266466c4762b.png

原文:http://blog.csdn.net/u012286242/article/details/28429267

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值