正文
示例代码如下:
/** 获取天气的WebServiceURL */
String url
= \ + \//使用HTTPPOST=对象提交数据
HttpPost httpRequest=new HttpPost(url); //超时设置
HttpParams params=new BasicHttpParams(); //从连接池获取连接的超时时间
ConnManagerParams.setTimeout(params, 1000); //通过网路与服务器建立连接的超时时间
HttpConnectionParams.setConnectionTimeout(params, 3000); //读响应数据的超时间
HttpConnectionParams.setSoTimeout(params, 5000); //设计请求参数
httpRequest.setParams(params); //传递请求参数
List
paramsList.add(new BasicNameValuePair(\paramsList.add(new BasicNameValuePair(\paramsList.add(new BasicNameValuePair(\ UrlEncodedFormEntity murlEncodedFormEntity= new UrlEncodedFormEntity(paramsList,HTTP.UTF_8); httpRequest.setEntity(murlEncodedFormEntity);
HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest); //使用GetEntity方法获得返回结果
final int ret=httpResponse.getStatusLine().getStatusCode(); if (ret==HttpStatus.SC_OK) {
inputStream=httpResponse.getEntity().getContent(); }
12
正文
3.8 SAX解析
SAX解析采用了基本事件的模型,解析快、占内存少。它是按顺序解析XML文档,在解析过程中触发一系列回调方法执行,从而获取到我们关注 的内容。
SAX API中主要有四种处理事件的接口:ContentHandler,DTDHandler, EntityResolver 和 startDocument() 在文档开始时调用这个方法 endDocument() 当文档结束的时候,调用这个方法
startElement(String namespaceURI, String localName, String qName, Attributes atts) 当读到一个开始标签的时候,会触发这个方法。namespaceURI就是命名空间,localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签。通过atts可以得到所有的属性名和相应的值。
?
ErrorHandler。本设计中使用的是ContentHandler接口,下面是一些ContentHandler接口常用的方法:
? ? ?
endElement(String uri, String localName, String name)这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。
characters(char[] ch, int start, int length) 这个方法用来处理在XML文件中读到的内容,第一个参数用于存放文件的内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。
因为ContentHandler是一个接口,在使用的时候可能会有些不方便,因此,SAX还为其制定了一个Helper
?
类:DefaultHandler,它实现了这个接口,但是其所有的方法体都为空,在实现的时候,只需要继承这个类,然后重载相应的方法即可
示例代码如下: TrainHomeActivity.java:
public static List readXML(InputStream inputStream){
List train = null; try {
//创建SAXParserFactory对象
SAXParserFactory spf = SAXParserFactory.newInstance(); //返回一个SAXParser解析器
SAXParser parser = spf.newSAXParser();
//根据SAXParser解析器获取XMLREADE事件源 XMLReader xmlReader=parser.getXMLReader(); //实例化一个DefaultHandler对象 TrainHandler handler=new TrainHandler(); //设置处理器
xmlReader.setContentHandler(handler); //解析文档
xmlReader.parse(new InputSource(inputStream)); train=handler.trains;
13
} catch (Exception e) {
正文
}
e.printStackTrace();}
return train;
TrainHandler.java
public class TrainHandler extends DefaultHandler{
private static final String TAG=\private static final boolean D=true; //定义返回的列表
public List trains; //当前读到的数据 private TrainMessagae train; private StringBuffer buffer=null; boolean buffering=false;
//设置一个可以定位文件内容、时间、事件发生位置的定位对象 public void setDocumentLocator(Locator locator) { }
//文档解析开始时间 @Override
public void startDocument() throws SAXException { }
//文档结束事件 @Override
public void endDocument() throws SAXException { }
@Override
public void startElement(String namespaceURI, String localName, String qName,
Attributes atts) throws SAXException {
if(D)Log.d(TAG, \buffer.delete(0, buffer.length());
if (localName.equals(\
trains=new ArrayList(); }else if (localName.equals(\
14
buffer=new StringBuffer();
正文
}
}
train=new TrainMessagae();
@Override
public void endElement(String namespaceURI, String localName, String qName) }
@Override
public void characters(char[] ch, int start, int length) }}
throws SAXException { buffer.append(ch,start,length);
if (localName.equals(\ } if (D) { }
Log.d(TAG, \trains.add(train);
train.setTrainCode(buffer.toString().trim()); train.setStartStation(buffer.toString().trim()); train.setStartTime(buffer.toString().trim()); train.setArriveStation(buffer.toString().trim()); train.setArriveTime(buffer.toString().trim()); train.setUseDate(buffer.toString().trim());
} else if (localName.equals(\} else if (localName.equals(\} else if (localName.equals(\} else if (localName.equals(\}else if (localName.equals(\}else if (localName.equals(\
throws SAXException {
15
正文
第四章 生活小助手软件设计
根据软件的预期目标进行软件系统设计,这对开发工作有很大的帮助,同时也会使后期测试工作容易进行。软件设计主要包括软件结构设计、UI界面设计和数据库设计。根据要实现的具体功能确定软件框架结构,绘制UI界面草图,根据数据需求设计数据库。
4.1 软件结构设计
本软件设计首先确定分为3大模块:天气、列车、食谱。在这3个大模块的基础上再分为小的功能模块,然后在对各个小的功能模块进行详细功能设计、UI界面设计和代码编写。采用这种层层细化的模块化管理方式可以使系统结构更清晰,便于他人理解和阅读。本软件分为以下几个功能模块。打开软件进入欢迎界面,在第一次打开软件时,则创建数据库,添加食谱数据信息,欢迎界面持续2-3秒钟进入到主界面。主界面有连接三大模块的按钮,通过这三个按钮进入三大模块。食谱模块主要分为三大界面,通过这三大界面实现食谱查询、保存、删除和创建的功能。同样,列车模块也分为三大界面,实现站站查询、车次查询和保存的功能。天气预报模块主要有两部分功能:天气查询和城市管理。框架结构如图4-1。
欢迎界面主界面食谱列车天气首页推荐我首页保存提醒未来三天天气城市管理收藏自制食谱站站查询车次查询 图4-1 框架结构图
4.2 系统界面设计
根据系统需求,可知至少创建三个界面:天气预报界面、食谱界面和列车时刻界面,系统和用户交互依赖于直观的图形化界面,UI设计必不可少。以下是个主要UI界面的设计草图。
1. 主界面设置食谱、列车和天气三个按钮,这三个按钮是进入三大功能模块的通道。如图4-2所示
16