ddc
联网
平面设计 画册 VI欣赏 包装 CG-插画 搜索 个人网页 Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校 专题欣赏 SEO 图标欣赏 专题
上海网站建设 网站建设 域名注册 虚拟主机 广州网站设计 域名注册 广州网站建设 上海网站建设 虚拟主机 广州网页设计 虚拟主机 域名注册 acg ACG玩家 品牌设计
求创科技
网站建设
中国互联
投稿
素材出售
中国设计秀
中资源
当前位置:网络学院首页 >> 设计教程 >> WAP网站攻略 >> WAP建站入门教程

WAP建站入门教程 (15)

来源:中国设计秀    作者:    点击:2387     加入收藏    发表评论
0
顶一下

九、定时器

介绍了如何使用定时器来实现动态刷新
    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.wml\n\n");

    *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-%d\n"));
    *pCtxt<<(LPCTSTR)tmCurrent.Format(_T("%H:%m:%S\n"));

    *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.wml\n\n");

    *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]
2006-12-23 11:47:00    出处:yesky
Google
热点文章/相关文章

音乐
嫁衣 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 没有人比我更爱你
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 明天过后 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 降临 下雨天 小酒窝 樱花草 恋爱新手 说唱脸谱 红色高跟鞋 寂寞才说爱 深深爱过你 爱上你是个错 即使知道要见面 不是因为寂寞才想你
城府 假如 花海 兰亭序 棉花糖 舍不得 最后一次 女人如烟 外滩十八号 我们的纪念 我们的无奈 心在跳情在烧 爱上你是我的错 爱情里没有谁对谁错