首页  |  精品网站  |  原创作品秀   |  艺术设计  |  网络学院  |  信息中心  |  站内搜索  |  求职招聘  |  建站资源  |  服装网站  |  编程开发 |  设计论坛 
  平面设计 画册 VI欣赏 包装 CG-插画   酷站 个人网页 商业网站   Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校   专题欣赏 SEO 图标欣赏
域名注册 虚拟主机 广州网站建设 广州网页设计 IDC赞助 设计资源下载 虚拟主机 域名注册 品牌网站建设 服装品牌网站建设 广告服务 网站推广 娱乐
当前位置:首 页 >> 网络学院 >> WAP网站攻略 >> WAP建站入门教程

WAP建站入门教程

来源:yesky 被读3031次

中资源
转载请注明出处-中国设计秀-cnwebshow.com

九、定时器

介绍了如何使用定时器来实现动态刷新
    WML中的ontimer事件有着很重要的意义。在实现自动刷新和动画方面很有用处。下面就要讲述如何使用ontimer事件来实现一个自动刷新的时钟程序。
    在实现自动刷新的过程中一个十分重要的问题就是Cache。Cache在WAP中有很重要的作用,但是同时它也给程序编制人员带来了很多不方便。例如:当我反复地查询同一支股票信息的时候,如果不采取防止Cache的方法,那么结果只能是一个。这显然是不正确的。那么如何防止这种情况发生呢?在WAP问答中有详细的解答。但是这里将采用一种最简单的办法,那就是使得用户所产生的URL请求没有一次是相同的。即使出现相同,那么手机的内存无法保留那么多的页面内容。
    时钟的例子程序如下:(需要注意到WML页面和动态生成程序)
Main.wml

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="main" ontimer="http://127.0.0.1/wap/wapd.dll?GetTime?ID=100" title="Main">
    <timer name="wait1" value="60"/>
    <p>
        Wait for a moment...
    </p>
</card>
</wml>
    动态时钟程序的核心:
void CWAPExtension::GetTime(CHttpServerContext* pCtxt,int nID)
{
    AddHeader(pCtxt,"Content-type: text/vnd.wap.wmlnn");

    *pCtxt<<_T("<?xml version="1.0"?>n");
    *pCtxt<<_T("<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN");
    *pCtxt<<_T("" "http://www.wapforum.org/DTD/wml_1.1.xml">n");
    *pCtxt<<_T("<wml>n");

    CString strCard;
    strCard.Format(_T("<card id="time" ontimer="http://127.0.0.1/wap/wapd.dll?GetTime?ID=%d" title="Time">n"),++nID);
    *pCtxt<<(LPCTSTR)strCard;

    CString strWait;
    strWait.Format(_T("<timer name="wait%d" value="60"/>"),nID);
    *pCtxt<<(LPCTSTR)strWait;

    *pCtxt<<_T(" <p>n");

    CTime tmCurrent=CTime::GetCurrentTime();
    *pCtxt<<(LPCTSTR)tmCurrent.Format(_T("%Y-%m-%dn"));
    *pCtxt<<(LPCTSTR)tmCurrent.Format(_T("%H:%m:%Sn"));

    *pCtxt<<_T(" </p>n");
    *pCtxt<<_T(" </card>n");
    *pCtxt<<_T("</wml>");
}
    我们注意到nID在不断增加,那么就意味着nID就不可能相同。那么每次的URL就不会相同,手机每次必须去服务器取回内容。大家同时也注意到了ontimer的name怎么也在不断地改变呢?这个是一个很有意思的事情:在UpPhone和Nokia WAP Toolkit 1.2中,如果不改变这个ID,那么就只出现一次刷新,这是为什么呢?很简单,他们将timer这个变量做为全局变量保存了下来,再下一次进来的时候,忘记将timer的value重新赋值了。但是这也不是一个最好的解决办法。你会发现UpPhone在运行128次后就死掉了。为什么?因为每次不同,它都作为全局的timer,因此最多只能有128个timer。怎么办呢?最好的程序在下面:
void CWAPExtension::GetNext(CHttpServerContext* pCtxt,int nID)
{
    nID=nID%67+1;

    AddHeader(pCtxt,"Content-type: text/vnd.wap.wmlnn");

    *pCtxt<<_T("<?xml version="1.0"?>n");
    *pCtxt<<_T("<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN");
    *pCtxt<<_T("" "http://www.wapforum.org/DTD/wml_1.1.xml">n");
    *pCtxt<<_T("<wml>n");
    *pCtxt<<_T("<card id="humor" title="Picture">n");
    *pCtxt<<_T(" <onevent type="ontimer">n");
    CString strGoTo;
    strGoTo.Format(_T(" <go href="http://127.0.0.1/wap/wap.dll?GetNext?ID=%d">n"),nID);
    *pCtxt<<(LPCTSTR)strGoTo;
    *pCtxt<<_T(" <setvar name="wait" value="150"/>n");
    *pCtxt<<_T(" </go>n");
    *pCtxt<<_T(" </onevent>");
    *pCtxt<<_T(" <timer name="wait" value="150"/>");
    *pCtxt<<_T(" <p>n");
    CString strImage;
    strImage.Format(_T(" <img alt="wbmp%d" src="http://127.0.0.1/wap/%d.wbmp"/>n"),nID,nID);
    *pCtxt<<(LPCTSTR)strImage;
    *pCtxt<<_T(" </p>n");
    *pCtxt<<_T(" </card>n");
    *pCtxt<<_T("</wml>");
}
    这个程序相比之下就好多了。但是在UpPhone上运行还是有问题。已经有同志使用这种方法实现了WAP电子地图的自动更新。


<< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 >>
转载请注明出处-中国设计秀-cnwebshow.com



投稿 】【对本文进行评论】 【字体: 】【发布于2006-12-23 11:47】

相关专题:暂无相关专题

上一篇:WAP技术的简单释义   下一篇:WAP手机常识
 认证LOGO下载
     
Copyright © 2005-2007 中国设计秀_网页设计教程_优秀网页设计欣赏_平面设计欣赏 All Right Reserved.
做最专业的设计服务网站,秀出自我,秀出精彩!中国设计秀,秀---无处不在!!
QQ:54292427  8208442 MSN:kingvisual#hotmail.com 交流群:9107036 3848215 8850631
粤ICP备05067046号 RSS