正文
}
}
imageView.setScaleType(ImageView.ScaleType.FIT_XY); return imageView;
5.3 列车时刻功能模块
在主界面点击列车按钮后进入列车界面。列车功能又分为三大模块:首页、保存和提醒。
首页模块实现了站站查询和车次查询。输入始发站和终点站,点击站站查询,通过HTTP POST请求访问Web Service的获取信息,对于获得数据流通过SAX解析获得有用的信息,具体实现方法在3.7节和3.8节已经介绍。将获得有用信息在列表中显示,长按某车次信息可以实现车次信息存储。输入车次信息,点击车次查询,通过SOAP协议访问web service的getWeatherbyCityName方法获得有用信息,具体实现方法参照3.6节。
保存模块的功能是显示存储的车次信息,便于在无网络的情况下查询信息。长按列表条目会跳出“是否删除”对话框,点击“是”可以实现删除功能。
提醒模块主要是告诉用户订票电话、网站和客服电话信息。 三个主要界面如下:
1.“首页”实现的功能图如下:
图5-9 首页 图5-10保存 图5-11 提醒
27
正文
图5-12 首页功能图
2. “保存”实现的功能图如下:
图5-13 保存功能图
28
正文
核心代码:
1. 通过TabHost控件实现不同页面切换,代码如下: @Override
protected void onCreate(Bundle savedInstanceState) {
inflater=LayoutInflater.from(this); true);
//我界面
}
//radio监听事件
LocalActivityManager localAcManager=new LocalActivityManager(TrainMainActivity.this,
localAcManager.dispatchCreate(savedInstanceState); tabHost=(TabHost)findViewById(android.R.id.tabhost);
//如果通过findViewById得到TabHost 一定要调用 TabHost.setup();
tabHost.setup(localAcManager);
tabHost.addTab(tabHost.newTabSpec(\
setContent(new
Intent(TrainMainActivity.this,TrainHomeActivity.class)));//首页界面
tabHost.addTab(tabHost.newTabSpec(\
setContent(new
Intent(TrainMainActivity.this,TrainCollectActivity.class)));//推荐界面
tabHost.addTab(tabHost.newTabSpec(\
setContent(new Intent(TrainMainActivity.this,TrainSettingActivity.class)));
radioGroup=(RadioGroup)findViewById(R.id.train_tab_group);
radioGroup.setOnCheckedChangeListener( checkedChangeListener );
private OnCheckedChangeListener checkedChangeListener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub switch (checkedId) { case R.id.train_home:
break;
tabHost.setCurrentTabByTag(\如果选中推荐 break;
case R.id.train_collect:
tabHost.setCurrentTabByTag(\//如果选中首页
case R.id.train_setting:
29
正文
};
}
}
tabHost.setCurrentTabByTag(\ //如果选中我 break;
2.通过站站查询获得列车信息,代码如下:
if (v.getId()==R.id.stationbutton) {
public static List readXML(InputStream inputStream){
}
startstation=Startstation.getText().toString(); endstation=Endstation.getText().toString(); TrainHttppost();
Log.e(\if(inputStream==null){
Toast.makeText(TrainHomeActivity.this, \查询失败\List trainMessagaes=new ArrayList(); trainMessagaes= readXML(inputStream); Bundle bundle=new Bundle(); bundle.putParcelableArrayList(\
(ArrayList
extends
Parcelable>)
}else {
trainMessagaes);
Intent intent =new Intent(TrainHomeActivity.this, TrainSearchActivity.class); intent.putExtras(bundle); startActivity(intent);
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);
30
正文
}
}
//解析文档
xmlReader.parse(new InputSource(inputStream)); train=handler.trains; // TODO: handle exception e.printStackTrace();
} catch (Exception e) {
return train;
protected void TrainHttppost() {
// TODO Auto-generated method stub /** 获取天气的WebServiceURL */
String url = \
+ \
//请求参数
//String requestStr=\+ startstation + \endstation Log.e(\正在查询\
try {
//使用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
new ArrayList
paramsList.add(new BasicNameValuePair(\Log.e(\始发站\
paramsList.add(new BasicNameValuePair(\
31
+\