基于J2ME的SVGT移动应用(二)

 
使用JSR-172解析XML数据
使用 SVG不可避免的要涉及XML的解析和使用。JSR-172是J2ME下访问WEB服务的标准API,提供了一个标准的轻量级XML解析器。JSR-172实现了JAXP1.2(Java API for XML Processing)的一个子集,支持SAX2.0。在JSR-172中使用SAX方式处理XML数据,相比DOM的处理方式更加节省内存,因此在同样的硬件条件下,SAX能够处理更大的XML文档或数据。JSR-172中包括3个包,其中javax.xml.parsers 包括SAX解析器,工厂和异常类;org.xml.sax中包括核心SAX API;org.xml.sax.helpers中包括多种辅助类。
此外 ,用户还可以使用 KXML等XML解析器在J2ME应用程序中处理XML数据,尤其是在平台不支持JSR-172的时候。
以下是使用 SAX解析XML的具体实例,其中省略了一些代码。首先创建SAX处理器类。
class BasicHandler extends DefaultHandler
{
private Stack tagStack = new Stack();
public BasicHandler (){}
public void startDocument() throws SAXException {}
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException  {
    if(qName.equals("AAA")) { /* 数据处理*/}
    tagStack.push(qName);
  }
public void characters(char[] ch, int start, int length) throws SAXException {
    String chars = new String(ch, start, length).trim();
    if(chars.length() > 0){
      String qName = (String)tagStack.peek();
      if (qName.equals("BBB")) { /* 数据处理*/}
}
}
public void endElement(String uri, String localName, String qName, Attributes attributes) throws SAXException  {
    tagStack.pop();
  }
  public void endDocument() throws SAXException   { }
}
之后装入一个XML文件并指定为此前定义的SAX处理器。
try
{
  SAXParserFactory factory = SAXParserFactory.newInstance();
  SAXParser saxParser = factory.newSAXParser();
  FileConnection fc = (FileConnection) Connector.open("file:///root1/phones.xml");
  InputStream is = fc.openInputStream();
  InputSource inputSource = new InputSource(is);
  saxParser.parse(is,new BasicHandler(this));
}
catch(Exception ex) {}
     我们也可以从一个输入流中加载XML,例如从一个XML字符串:
      InputStream is = new ByteArrayInputStream(xmlString.getBytes(), 0, xmlString.length());
      InputSource inputSource = new InputSource(is);
      saxParser.parse(is,new BasicHandler(svgCanvas));
 
一个简单的SVG MIDP应用
    现在我们可以将上面提到的技术组合起来,形成一个完整基于手机短信的网络监控应用,功能是根据短信数据显示当前的网络状态。类图如下:
基于J2ME的SVGT移动应用(二)_第1张图片
 
其中 MySamplePushRegistry为一个MIDP应用,启动后显示界面为一个SvgCanvas类对象,并在在50001端口启动SMS侦听。SvgCanvas为SVG窗口类,负责显示SVG内容,这些内容来自一个定义好的SVG文件,这里为一个简单的网络图,包括一个PC机,一台打印机以及之间的网络连接。BasicHandler为SAX解析处理器,Status类为短信数据类。
应用程序的基本流程为: MIDP启动后显示SVG文件,并启动在SMS特定端口侦听;在接收到XML短信数据后,MIDP使用BasicHandler解析XML,生成状态对象并存入对象列表;在解析结束后,通知SvgCanvas将根据状态对象更新显示界面,在故障情况下将相应部件颜色改为红色,正常情况则为绿色。
应用程序在模拟器中运行的情况如下:
1, 启动画面
  基于J2ME的SVGT移动应用(二)_第2张图片
2, 发送 XML数据短信
基于J2ME的SVGT移动应用(二)_第3张图片
3,PC正常,与打印机连接故障和打印机故障的情况显示
  基于J2ME的SVGT移动应用(二)_第4张图片
结论
Mobile SVG已开始在 MMS上显露身手,但实际上除了MMS,Mobile SVG还有丰富的应用,其中包括:
l         娱乐教育等,包括各种手机游戏和在线教程等。
l         基于位置的服务,在地图上显示运动物体及相关链接,同时允许用户缩放地图、切换不同图层的可见性、选择特定的区域等。具体应用如汽车导航、汽车调度、电子导游、移动广告等。
l         现场服务:包括技术制图,设备监控等,借助于 Mobile SVG,就可以绘制出前后一致的、高品质的图像,可以看全景,也可以看局部细节。
l         其它任何 JPG、GIF或其它位图格式不能满足要求的无线应用场合,如要求提供内容丰富、可伸缩、互动的图形或动画的地方。
 
对于下一代无线系统( 3G)来说,是否能够成功取决于用户的需求。对于无线用户来说,如果存在更加吸引他们的应用,他们就会更换现有的手机。经由像 Mobile SVG这样以用户为中心的技术增强的MMS,将会产生更多促使手机升级的充分的理由。所以,对于业界来说,其面对的挑战是实现和应用Mobile SVG或其它矢量应用,例如FlashLite等。总的来说,在实现Mobile SVG的过程中,需要运营商、终端制造商、内容提供商共同努力,才能使Mobile SVG的无限魅力在资源受限的移动设备上大放光彩。
 
参考资料
移动 SVG技术规范
http://www.w3.org/TR/SVGMobile/
J2ME技术规范 :
http://java.sun.com/j2me/
MIDP技术规范:
http://java.sun.com/products/midp/
JSR-226技术规范以及使用示例 RI Binary for JSR-226 Scalable 2D Vector Graphics API for J2ME™
http://forum.nokia.com/info/sw.nokia.com/id/5305ba6b-e943-42cb-8bff-83d5960a9df4.html
通过 Push信息来自动启动JAVA移动应用程序
http://www.matrix.org.cn/resource/article/44/44449_Push+JAVA+Mobile.html
Design and Implement a Cartographic Client Application For Mobile Devices using SVG Tiny and J2ME
http://www.carto.net/papers/li_hui/li_hui_design_and_implement_cartographic_client_for_svg_mobile.pdf
J2ME移动2D图形快速入门
http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=802

你可能感兴趣的:(xml,String,mobile,sms,j2me,attributes)