基于OPhone的Widget联网实例开发(2)

移动开发
Widget是一个互动式的迷您应用程序,您可以在移动设备上运行能迅速方便地访问Internet上的内容。移动Widget例子有:每日天气更新,新闻阅读组件,货币转换器,时钟或日历提醒等。

接上文《基于OPhone的Widget联网实例开发

2.添加货币选择栏

(1)在html文件中的table里再添加一行三列,代码如下

  1. <tr> <td align="right" > <select id=  
  2. "currency_left" onchange="getLeftOption(this)  
  3. > <option value="CNY">人民币<option> 
  4. <option value="USD">美元option> ...省略...   
  5. <option value="EUR">欧元option>   
  6. select> td> <td width="50" font-size="0.6em">兑换td> 
  7. <td align="left" >   
  8. <select id="currency_right" onchange="getRightOption(this)" > 
  9. <option value="CNY">人民币  
  10. option> <option value="USD">美元option> 
  11.  <option value="JPY">日元option> ...省略... <option value="EUR">欧元  
  12. option> select> td> tr>    

上面代码的意思主要是创建一行三列,第一和第三列放置货币选择栏

(2)在css里添加对应的代码

  1. #currency_left,#currency_right { font-size: 0.8em; }    

设置货币选择栏的字体大小

接着就可以保存,Run AS运行,看下效果了:

 

3.添加货币金额输入栏

(1)在html中table里再增加一行三列

  1. <tr> <td align="right" > 
  2. <INPUT id="num_left" type="text" value="1" size="8" > 
  3. td><td width="50"> 
  4. <img id="arrowimg" src="images/forward.png"   
  5. align="center" onclick="calculateCurrency()"> 
  6. img> td> <td align="left" >   
  7. <INPUT id="num_right" type="text" value="1" size="8" disabled="true">   
  8. td> tr>    

也是创建一行三列,其中第二列放置一个向后的箭头#t#

 

第一和第三列放置输入框,并且设置第三列的输入框禁止输入,这样只能按箭头的方向由左边输入金额,右边显示兑换后的金额。

(2)最后把上面的箭头图片拷到硬盘上这个工程目录下的images文件夹中,然后回到JIL中按F5刷新(和上一步是添加背景图片bg.png的操作一样)。

接着就可以保存,Run AS运行,看下效果了:

 


这样界面上半部分的布局我们就完成了,下面我们在js里添加对应的事件处理。#p#

添加事件处理

1.添加network.js的调用

首先在硬盘上的工程目录下创建一个名为js的文件夹,把我们之前创建的那个network.js文件拷进去,并且把CurrencyHand.js这个文件也移进去,F5刷新,可以看到现在的工程目录下增加了js文件夹

 

同时修改html中的head部分原来关于CurrencyHand.js文件的链接,并增加对network.js的链接,修改后如下

这样就可以调用network.js中已经写好的请求xml数据的函数了。

2.了解请求的数据形式

在开始请求数据前,我们首先看一下我们要请求的数据的内容及格式

我们使用一个公共的网站来获取实时的更新数据,这个网址为

这是欧洲中央银行(ECB:European Central Bank)提供的数据链接,是以欧元为基准的,和其他各种货币间的实时更新的汇率关系。内容和格式为:

  1. xml version="1.0" encoding="UTF-8"?> - <gesmes:Envelope xmlns:gesmes=  
  2. http://www.gesmes.org/xml/2002-08-01
  3.  xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">   
  4. <gesmes:subject>Reference rates  
  5. gesmes:subject> - <gesmes:Sender> <gesmes:name>European Central Bank  
  6. gesmes:name> gesmes:Sender> - <Cube> -   
  7. <Cube time="2009-12-22">   
  8. <Cube currency="USD" rate="1.4279" />   
  9. <Cube currency="JPY" rate="130.83" />   
  10. <Cube currency="BGN" rate="1.9558" />   
  11. <Cube currency="CZK" rate="26.266" /> 
  12.  <Cube currency="DKK" rate="7.4420" /> 
  13.  <Cube currency="EEK" rate="15.6466" />   
  14. <Cube currency="GBP" rate="0.89305" /> 
  15.  <Cube currency="HUF" rate="274.28" />   
  16. <Cube currency="LTL" rate="3.4528" /> 
  17.  <Cube currency="LVL" rate="0.7080" /> 
  18.  <Cube currency="PLN" rate="4.1770" />   
  19. <Cube currency="RON" rate="4.2193" />   
  20. <Cube currency="SEK" rate="10.4295" /> 
  21.  <Cube currency="CHF" rate="1.4987" />   
  22. <Cube currency="NOK" rate="8.3650" />   
  23. <Cube currency="HRK" rate="7.2830" /> 
  24.  <Cube currency="RUB" rate="43.6041" />   
  25. <Cube currency="TRY" rate="2.1798" />   
  26. <Cube currency="AUD" rate="1.6259" /> 
  27.  <Cube currency="BRL" rate="2.5468" /> 
  28.  <Cube currency="CAD" rate="1.5109" /> 
  29.  <Cube currency="CNY" rate="9.7498" />   
  30. <Cube currency="HKD" rate="11.0744" />   
  31. <Cube currency="IDR" rate="13543.20" /> 
  32.  <Cube currency="INR" rate="66.8200" />   
  33. <Cube currency="KRW" rate="1685.05" /> 
  34.  <Cube currency="MXN" rate="18.4699" /> 
  35.  <Cube currency="MYR" rate="4.9100" />   
  36. <Cube currency="NZD" rate="2.0294" />   
  37. <Cube currency="PHP" rate="66.389" /> 
  38.  <Cube currency="SGD" rate="2.0076" />   
  39. <Cube currency="THB" rate="47.492" /> 
  40.  <Cube currency="ZAR" rate="11.0340" /> 
  41.  Cube> Cube> gesmes:Envelope>    
  42.  

#p#3.实现事件处理函数

好了,知道了网址和其提供的数据格式后,接下来我们就可以使用Ajax的形式请求数据,并通过DOM的方式从中解析出我们需要的某些项数据。

下面修改CurrencyHand.js文件,首先删除里面自动生成的代码

我们在html里注册了三个事件,货币选择栏有两个事件getLeftOption(this),getRightOption(this),表示货币金额兑换的箭头有一个事件calculateCurrency(),下面我们就来实现这三个事件

(1)首先定义一些变量,添加表示URL及左右货币名称和汇率比例的变量,

  1. var gUrl = 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml';   
  2. var leftCurrency="CNY"; var rightCurrency="CNY"; var currencyRate=0;    

设左右货币的初始名为CNY,人民币。

(2)然后就 可以实现左边那个选择栏注册的事件

  1. function getLeftOption(object)   
  2. { var valueOption=object.options  
  3. [object.options.selectedIndex].  
  4. value; leftCurrency=valueOption;  
  5.  document.getElementById("flag_left").  
  6. setAttribute("src", "images/" +   
  7. leftCurrency+ "1.png");   
  8. requestXML(gUrl, iterateXML, showStatus); }    
  9.  

getLeftOption(object)函数首先获左取选取栏选取的货币名称,并改变和货币对应的左边的国旗,最后就是调用我们在network.js里定义的那个请求xml数据的函数requestXML,并且传进的参数中URL为gUrl,数据请求成功的回调函数为iterateXML,失败的回调函数为showStatus。

首先看下失败的回调函数showStatus,

  1. function showStatus(text) { alert(text); }    

函数很简单,就是显示出失败的原因。

(3)下面重点看下数据请求成功的回调函数iterateXML,在这个函数里主要对返回的xml文件进行DOM解析

  1. function iterateXML(xmlDoc)   
  2. { var leftRate=0; var rightRate=0; var items=xmlDoc.getElementsByTagName  
  3. ("Cube"); for (var i = 2; i < items.length; i++)   
  4. { var itemCurrency = items[i].getAttribute("currency"); if(itemCurrency==leftCurrency)   
  5. leftRate=items[i].getAttribute("rate"); }   
  6. if(itemCurrency==rightCurrency)   
  7. rightRate=items[i].getAttribute("rate"); }  
  8.  if(leftCurrency=="EUR") { leftRate=1; }  
  9.  if(rightCurrency=="EUR") { rightRate=1; } }  
  10.  currencyRate=rightRate/leftRate;   
  11. document.getElementById("num_left").  
  12. value=1; document.getElementById("num_right").  
  13. valuecurrencyRate; }    

这个函数主要用来解析汇率数据,我们由之前的数据文件看到,汇率信息存储在由Cube表示的标签中,所以我们获得所有Cube名字的标签,然后分别从这些标签里读出左右货币名的汇率,由于这些汇率是以欧元为基准的,因此欧元并没有在Cube标签集中,因此对选择了欧元的货币的汇率进行单独处理。然后计算,获得两个货币间的汇率关系,并把结果在界面上显示出来。

同理,右边选择栏的事件函数内容类似

  1. function getRightOption(object) { ...省略... }   

(4)接下来还有箭头上注册的兑换函数

  1. function calculateCurrency()   
  2. { var moneySum=document.getElementById("num_left").value;   
  3. document.getElementById("num_right").value=currencyRate*moneySum; }    

这个函数也很简单,就是读出左边输入的金额数目,然后和汇率相乘,就是兑换成的右边货币的金额。

这样我们就实现了界面上半部分对应的功能,

保存,Run As,看下效果吧,

 

和联网相关的功能我们就实现了,我们可以从远程的网站服务器上读取我们所需的数据,并且用DOM的方式对数据进行提取。

虽然界面的下半部分我们还没有实现,但那只是一些界面元素的布局及显示,核心的联网读取数据我们通过界面上半部分的功能已经实现了,因此限于篇幅,快速浏览栏部分就不再介绍实现了,不过有了前面的介绍,下半部分也应该好实现了,只是元素的布局显示及对应的事件处理而已。

总结

我们首先介绍了联网的Widget的作用,并且简单介绍了相关的Ajax和DOM的基本知识,并完成了可以请求xml数据的函数,如果在JIL上请求xml数据,则可以直接使用。最后通过一个实时查看汇率的实例对如何在OPhone是开发需要联网获取数据的Widget进行了具体的介绍。

以上我们只是简单的介绍了Widget联网相关的基本知识及简单的例子,更复杂的内容我们以后接着学习。

责任编辑:chenqingxiang 来源: ophonesdn
相关推荐

2010-07-26 14:25:06

Widget开发

2009-09-08 17:45:13

Ophone Widg

2011-09-07 17:54:40

Android Wid开发

2011-09-08 13:11:07

Android Wid实例

2010-09-15 13:54:36

WidgetOPhone

2010-07-26 13:55:10

OPhone游戏开发

2011-09-08 13:41:53

Widget

2011-08-01 16:43:51

ibmdwHTML5Dojo

2011-09-08 09:38:46

HTML5 WidgeDojo

2011-09-07 14:01:41

Android Wid实例

2011-09-09 13:23:17

Widget

2009-08-03 09:41:11

OPhone SDK

2010-07-26 12:33:04

控件

2010-07-26 12:57:12

OPhone游戏开发

2011-09-07 13:42:36

Android Wid实例

2011-02-28 13:04:27

RelativeLayAndroid Wid

2011-05-03 15:13:23

BlackBerryWidget

2010-07-13 09:02:19

Widget开发

2011-09-09 20:14:58

Android Wid

2009-08-17 17:53:07

RSS订阅开发实例
点赞
收藏

51CTO技术栈公众号