【转】利用Titanium实现外汇兑换计算的ios代码
程序员文章站
2022-07-15 14:44:46
...
【原文】http://chuangyiji.com/2011/12/titanium-ios-android-exchange-code/
在帮公司的app写库函数和教程的时候,做了这个代码片段,titanium mobile还是很优雅的,主要的代码不过几十行,就实现了在ios设备下的外汇兑换计算功能,用户可以选择需要兑换的货币种类,然后输入金额,通过查询汇率就能完成计算。
目前来说,titanium mobile的弱项在于界面,所以我尽可能的要简化界面代码,好在ios设备的主要界面方式还是比较固定的,比如tableview,因此可以封装一些细节代码,使得前端的业务逻辑代码尽量简化。
其中,my是程序用的对象,所有核心变量都属于这个my对象。
如上面图中所示,这些代码完成了初始化的界面,初始的tableview中的核心数据是my.data,它的核心是三行row,因为基于后端的界面对象支持,因此实现界面的代码已经很简洁了,点击货币名称弹出picker选择的所有代码已经都封装了,前端目前要做的还有获得用户选择的值。个人对于js跨脚本传递变量还不太熟悉,因此用了最简单粗暴的方法,直接读写内存临时文件。
然后是那个核心的“计算”按钮了,通过soap协议如何调用外汇接口,在titanium的demo中有,这里就不多解释了。
这个计算按钮,首先通过soap协议调用,进行汇率计算,然后将计算结果和汇率再用前面说的row生成方式生成,并入到my.data中后,刷新tableview即可。
涉及到的wing ui对象代码、通用函数库tools和soap协议支持suds没有附上,这些库函数,特别是wing ui还没有整理好,本人对于js和titanium mobile以及iOS、android都是初学,代码中还有很多粗糙和错误的地方,需要在实际中不断磨合提高。国内好像使用titanium的朋友还不多,似乎用phonegap的多一些。等完成到一定阶段后,再提供下载吧。
以上的代码只是demo之用,在界面和防错处理上还要增加多一些代码才能真正商用。
在帮公司的app写库函数和教程的时候,做了这个代码片段,titanium mobile还是很优雅的,主要的代码不过几十行,就实现了在ios设备下的外汇兑换计算功能,用户可以选择需要兑换的货币种类,然后输入金额,通过查询汇率就能完成计算。
目前来说,titanium mobile的弱项在于界面,所以我尽可能的要简化界面代码,好在ios设备的主要界面方式还是比较固定的,比如tableview,因此可以封装一些细节代码,使得前端的业务逻辑代码尽量简化。
var my = {}; my.money = 0; my.data = []; //货币数组 my.currency = ['人民币', '美元', '港币', '澳元', '加元', '欧元', '日元', '韩元', '新西兰元', '台币']; //货币对应代码数组 my.cur_sc = ['CNY', 'USD', 'HKD', 'AUD', 'CAD', 'EUR', 'JPY', 'KRW', 'NZD', 'TWD']; //主窗口 var win = Titanium.UI.currentWindow; win.barColor = 'faa61a'; win.backgroundImage = '../images/bg/back01.jpg'; //开始创建主tableview //from 货币 row row = wing.ui.createTableViewRow({ type : rowPicker, picker_type : pickerSingle, picker_data : my.currency, title : '基准货币', value : my.currency[0], buttonOK_title : '确认' }); //2011.12.16. row.addEventListener('RowChange', function(e) { //获得用户选择 my.from = Titanium.App.Properties.getString('RowPicker'); Ti.API.info('from:' + my.from); }); //设定from的初始值 my.from = my.currency[0]; my.data[0] = row; //to 货币 row row = wing.ui.createTableViewRow({ type : rowPicker, picker_type : pickerSingle, picker_data : my.currency, title : '转换货币', value : my.currency[1], buttonOK_title : '确认' }); //row 内容修改事件 //2011.12.16. row.addEventListener('RowChange', function(e) { my.to = Titanium.App.Properties.getString('RowPicker'); Ti.API.info('to:' + my.to); }); //设定to的初始值 my.to = my.currency[1]; my.data[1] = row; //输入金额 row row = wing.ui.createTableViewRow({ type : rowText, keyboard : keyboardNumbers, title : '金额', value : '0', textAlign : 'right' }); //row 内容修改事件 //2011.12.16. row.addEventListener('RowChange', function(e) { my.money = Titanium.App.Properties.getString('RowText'); }); my.data[2] = row; // tableview object var tableviewExchange = Titanium.UI.createTableView({ backgroundColor : 'transparent', data : my.data, style : Titanium.UI.iPhone.TableViewStyle.GROUPED }); win.add(tableviewExchange);
其中,my是程序用的对象,所有核心变量都属于这个my对象。
如上面图中所示,这些代码完成了初始化的界面,初始的tableview中的核心数据是my.data,它的核心是三行row,因为基于后端的界面对象支持,因此实现界面的代码已经很简洁了,点击货币名称弹出picker选择的所有代码已经都封装了,前端目前要做的还有获得用户选择的值。个人对于js跨脚本传递变量还不太熟悉,因此用了最简单粗暴的方法,直接读写内存临时文件。
然后是那个核心的“计算”按钮了,通过soap协议如何调用外汇接口,在titanium的demo中有,这里就不多解释了。
//计算货币汇率按钮 var btnCalExchange = wing.ui.createButton({ title : '计算', bottom : 20, left : 230, type : buttonCommon }); //计算汇率 btnCalExchange.addEventListener('click', function(e) { //#396 外汇,对于金额输入用数字正则进行判断,不对的话进行提示 //检查金额是否输入合法 if(isRegExp(regFloat, my.money) == false) { ShowInfo('金额输入错误,请重新输入'); } else { //soap url var url = "http://www.webservicex.net/CurrencyConvertor.asmx"; //soap参数设置 var callparams = { FromCurrency : my.cur_sc[my.currency.findIndex(my.from)], ToCurrency : my.cur_sc[my.currency.findIndex(my.to)] }; Ti.API.info('my from and to:' + my.from + ' ' + my.to); Ti.API.info('my from index:' + my.currency.findIndex(my.from)); Ti.API.info(callparams); //建立soap对象 var suds = new SudsClient({ endpoint : url, targetNamespace : 'http://www.webserviceX.NET/' }); try { //调用soap suds.invoke('ConversionRate', callparams, function(xmlDoc) { var results = xmlDoc.documentElement.getElementsByTagName('ConversionRateResult'); if(results && results.length > 0) { var result = results.item(0); var r1 = results.item(0).text; Ti.API.info('1 Euro buys you ' + r1 * my.money + ' U.S. Dollars.'); //创建结果row row = wing.ui.createTableViewRow({ type : rowText, keyboard : keyboardNumbers, title : '结果', value : r1 * my.money, textAlign : 'right', editable : false }); my.data[3] = row; //创建显示汇率row row = wing.ui.createTableViewRow({ type : rowText, keyboard : keyboardNumbers, title : '汇率', value : r1, textAlign : 'right', editable : false }); my.data[4] = row; //刷新 tableview tableviewExchange.setData(my.data); } else { Ti.API.info('Oops, could not determine result of SOAP call.'); } }); } catch(e) { Ti.API.error('Error: ' + e); } } }); win.add(btnCalExchange);
这个计算按钮,首先通过soap协议调用,进行汇率计算,然后将计算结果和汇率再用前面说的row生成方式生成,并入到my.data中后,刷新tableview即可。
涉及到的wing ui对象代码、通用函数库tools和soap协议支持suds没有附上,这些库函数,特别是wing ui还没有整理好,本人对于js和titanium mobile以及iOS、android都是初学,代码中还有很多粗糙和错误的地方,需要在实际中不断磨合提高。国内好像使用titanium的朋友还不多,似乎用phonegap的多一些。等完成到一定阶段后,再提供下载吧。
以上的代码只是demo之用,在界面和防错处理上还要增加多一些代码才能真正商用。