VRE实验7实验手册v30.docx

上传人:b****5 文档编号:11733990 上传时间:2023-03-31 格式:DOCX 页数:15 大小:40.56KB
下载 相关 举报
VRE实验7实验手册v30.docx_第1页
第1页 / 共15页
VRE实验7实验手册v30.docx_第2页
第2页 / 共15页
VRE实验7实验手册v30.docx_第3页
第3页 / 共15页
VRE实验7实验手册v30.docx_第4页
第4页 / 共15页
VRE实验7实验手册v30.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

VRE实验7实验手册v30.docx

《VRE实验7实验手册v30.docx》由会员分享,可在线阅读,更多相关《VRE实验7实验手册v30.docx(15页珍藏版)》请在冰豆网上搜索。

VRE实验7实验手册v30.docx

VRE实验7实验手册v30

(项目七)手机应用开发—IPSearch

1、项目名称:

项目名称:

手机多媒体开发—IPSearch

课时安排:

16

2、项目目标:

IPSearch项目效果图如下:

图7-1IPSearch效果图

功能:

界面一是logo界面,3秒后跳转到界面二。

界面二是查询界面,点击输入框位置可以输入IP地址,点击OK键得到查询结果,点击右软键退出程序。

说明:

学习VRE系统中的HTTP联网内容,完成这款IPSearch软件。

通过本次实验让学员熟悉VRE平台程序架构、深入理解VRE的图形图像处理机制,掌握VRE发送HTTP网络请求的操作方法。

(1)熟悉VRE程序架构

(2)掌握VRE应用程序开发基础

(3)深入理解VRE图形图像系统

(4)掌握VRE资源管理器的使用

(5)掌握VREHTTP操作方法

(6)生成手机版本,打包安装到手机运行

3、项目方式:

(1)老师带领下,每名同学独立完成该任务

4、项目步骤

4.1任务1:

修改应用程序的图标和标题(时间:

20分钟)

4.1.1任务描述

(1)修改应用程序的图标

(2)修改应用程序的标题

4.1.2任务目的

(1)熟悉VRE资源管理器及配置文件的使用

(2)掌握如何修改VRE应用程序的图标和标题

4.1.3任务要求

(1)编译生成手机版本,能在真机上正常运行。

4.1.4难点提示

参考项目三任务一

4.2任务2:

界面设计及框架搭建(时间:

20分钟)

4.2.1任务描述

(1)设计程序UI界面

(2)实现UI框架部分

4.2.2任务目的

(1)进一步掌握VRE框架

(2)掌握VREGUI设计方法

4.2.3任务要求

(1)UI设计美观,合理

(2)能够在模拟器上正常运行

4.2.4难点提示

(1)参考界面如图7-1所示。

(2)框架搭建,首先在工程文件IPSearch_start.c的入口函数vm_main()中创建控制logo的定时器,在回调函数TimerCB()中实现logo界面的跳转。

在draw_hello()中实现界面的绘制,根据界面标志位值的不同分别绘制相应的界面,参考代码如下:

VMINTg_ViewFlag=0;//定义界面标识符

VMINTg_TimerHandle;//定义定时器句柄

voidvm_main(void){

g_TimerHandle=vm_create_timer(1000,TimerCB);

}

staticvoiddraw_hello(void){

VMUINT8*buf;

/*获取目标缓冲*/

buf=vm_graphic_get_layer_buffer(layer_hdl[0]);

/*用白色黑底清屏*/

vm_graphic_fill_rect(buf,0,0,vm_graphic_get_screen_width(),

vm_graphic_get_screen_height(),VM_COLOR_WHITE,VM_COLOR_BLACK);

switch(g_ViewFlag)

{

case0:

draw_image(buf,"logo.jpg",0,0);//显示logo界面

break;

case1:

draw_image(buf,"IP.png",0,0);//显示IP查询背景图片

draw_IPtext(buf);//绘制查询界面文字信息

break;

default:

break;

}

voidTimerCB(VMINTtid)

{

g_ViewFlag++;//定时器刷新时界面跳转

if(g_ViewFlag==1)

{

vm_delete_timer(g_TimerHandle);//进入查询界面后删除定时器

}

handle_sysevt(VM_MSG_PAINT,0);

}

4.3任务3:

资源加载及UI界面绘制(时间:

20分钟)

4.3.1任务描述

(1)加载程序所需的图片资源

(2)将资源导入到内存中

(3)显示界面图片

4.3.2任务目的

(1)掌握资源管理器的使用

(2)掌握图片资源的导入方法

(3)掌握图片的显示方法

4.3.3任务要求

(1)将导入并显示图片资源的功能实现方法封装成函数

(2)在模拟器上能正常运行

(3)以断点调试的方式保证结果的正确性

4.3.4难点提示

(1)资源导入功能,请参考项目三任务3、任务4

4.4任务4:

网络连接(时间:

60分钟)

4.4.1任务描述

(1)发送HTTP联网请求

(2)获得网络返回的数据

4.4.2任务目的

(1)掌握VRE发送HTTP请求的操作步骤

(2)了解webxml获取数据的方法

4.4.3任务要求

(1)成功联网并获取返回数据

(2)实现所需功能,能在模拟器上正确运行

(3)生成手机版本,能够在手机上正常运行

4.4.4难点提示

(1)发送HTTP请求在工程文件IPSearch_start.c的http_request()函数中实现,网络连接的步骤为:

定义网络连接方式、组装联网地址、创建报头指针空间、组装URL和HTTP请求头、发送联网请求,最后释放指针空间。

参考代码如下:

#defineIP_URL

"

voidhttp_request(VMSTRnumber)

{

http_head_tg_head[1];//创建HTTP报头

asyn_http_req_tg_reg;//定义联网方式

VMCHARwURL[128]={0};

VMINTret;

//定义网络连接方式

g_reg.req_method=GET;

g_reg.use_proxy=HTTP_USE_CMNET;

strcpy(wURL,IP_URL);

strcat(wURL,number);//组装联网地址

//创建报头结构指针指向的空间

g_reg.http_request=(http_request_t*)vm_calloc(sizeof(http_request_t));

if(NULL==g_reg.http_request)

{

return;

}

//组装URL

strcat(g_reg.http_request->url,wURL);

//组装HTTP请求头

sprintf(g_head[0].name,"RANGE");

sprintf(g_head[0].value,"bytes=-1");

g_reg.http_request->nhead=1;

g_reg.http_request->heads=g_head;

ret=vm_asyn_http_req(&g_reg,http_hook_cb,http_state_cb);

//释放HTTP指针的空间

vm_free(g_reg.http_request);

}

(2)联网后,在http_hook_cb()函数中接收网络返回数据,将信息保存到全局数组中,传给数据解析函数,进行结果解析。

参考代码如下:

voidhttp_hook_cb(VMINTbResponse,void*pSession)

{

VMUINTnWriteLen=0;

VMINTfile_hdl;

VMCHARg_Info[500]={0};

http_session_t*session=(http_session_t*)pSession;

if(0==bResponse)

{

//把返回的信息保存到数组中

if(g_Info!

=NULL)

{

memset(g_Info,0,500);

strncpy(g_Info,session->resbody,session->nresbody);

}

//把联网返回的结果传给数据解析函数

g_show_info=http_result_parse(g_Info);

handle_sysevt(VM_MSG_PAINT,0);

}

}

4.5任务5:

数据解析(时间:

70分钟)

4.5.1任务描述

(1)解析网络返回数据,获取IP地址信息

4.5.2任务目的

(1)熟悉XML文件

(2)掌握XML文件的解析方法

4.5.3任务要求

(1)成功解析得到IP地址信息

4.5.4难点提示

(1)XML文件的解析在工程文件IPSearch_start.c的http_result_parse()函数中实现,数据解析中需要查找到XML文件中第二个字符串所在的位置,两个字符串中间的内容即是要获取的结果。

实现参考代码如下:

//网络返回的xml数据的格式

xmlversion="1.0"encoding="utf-8"?

>

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xmlns:

xsd="http:

//www.w3.org/2001/XMLSchema"xmlns="http:

//WebX

152.45.25.5

美国

//数据解析函数

VMINThttp_result_parse(VMSTRresbody)

{

VMINTnSize=0;

VMINTi=0;

VMCHARszStart[]="";

VMCHARszEnd[]="";

VMCHARchTemp[2]="";

VMSTRpFileTemp1=NULL;

if(resbody==NULL)

{

return0;

}

//查找地址信息所在位置

pFileTemp1=strstr(resbody,szStart);

pFileTemp1=strstr(pFileTemp1+1,szStart);

if(pFileTemp1)

{

i+=8;

while

(1)

{

if(pFileTemp1[i]=='<')

break;

chTemp[0]=pFileTemp1[i++];

strcat(g_Result,chTemp);

}

}

return1;

}

4.6任务6:

结果显示(时间:

20分钟)

4.6.1任务描述

(1)将解析后的结果显示到屏幕上

4.6.2任务目的

(1)熟悉字符的编码转换

(2)熟练掌握文字的输出

4.6.3任务要求

(1)将获取到的UTF-8格式的字符转化成UCS-2格式的显示

(2)在模拟器上能正常运行

(3)以断点调试的方式保证结果的正确性

4.6.4难点提示

(1)成功获取查询结果后,最后一步工作是结果显示,由于VRE手机只支持显示UCS-2格式的字符,所以首先需要调用UTF8toUCS2Code()函数进行字符转码,该函数定义在工程文件IPSearch_start.c中,实现参考代码如下:

VMINTUTF8toUCS2Code(VMUINT8*utf8_code,VMUINT16*ucs2_code)

{

VMUINT16temp1,temp2;

VMINTis_unrecognized=FALSE;

VMUINTstep=1,counter=0,end=0;

VMUINT8*utf8string=utf8_code;

if(!

utf8_code||!

ucs2_code){

return0;

}

end=strlen((char*)utf8_code);

while(counter

if(0x00==(*utf8string&0x80)){

/*1byteUTF-8Charater.*/

temp1=*((VMUINT8*)(utf8string));

wstrcpy((VMWCHAR*)ucs2_code++,(VMWCHAR*)&temp1);

step=1;

counter+=step;

utf8string+=step;

is_unrecognized=TRUE;

}

elseif(0xc0==(*utf8string&0xe0)&&

0x80==(*(utf8string+1)&0xc0)

){

/*2bytesUTF-8Charater.*/

temp1=(VMUINT16)(*utf8string&0x1f);

temp1<<=6;

temp1|=(VMUINT16)(*(utf8string+1)&0x3f);

step=2;

counter+=step;

utf8string+=step;

wstrcpy((VMWCHAR*)ucs2_code++,(VMWCHAR*)(&temp1));

is_unrecognized=TRUE;

}

elseif(0xe0==(*utf8string&0xf0)&&

0x80==(*(utf8string+1)&0xc0)&&

0x80==(*(utf8string+2)&0xc0)

){

/*3bytesUTF-8Charater.*/

temp1=(VMUINT16)(*utf8string&0x0f);

temp1<<=12;

temp2=(VMUINT16)(*(utf8string+1)&0x3F);

temp2<<=6;

temp1=temp1|temp2|(VMUINT16)(*(utf8string+2)&0x3F);

step=3;

counter+=step;

utf8string+=step;

wstrcpy((VMWCHAR*)ucs2_code++,(VMWCHAR*)(&temp1));

is_unrecognized=TRUE;

}

else{

temp1=*((VMUINT8*)(utf8string));

wstrcpy((VMWCHAR*)ucs2_code++,(VMWCHAR*)&temp1);

is_unrecognized=TRUE;

utf8string++;

counter++;

}

}

returnis_unrecognized;

}

(2)转码后,在draw_IPtext()函数中完成结果显示,当全局标志位g_show_info的值为1时,表示结果解析成功,则显示结果,否则返回。

实现参考代码如下:

VMINTg_show_info=0;

VMCHARg_Result[500]={0};

voiddraw_IPtext(VMUINT8*buf)

{

VMWCHARs[100]={0};

if(g_show_info==1)

{

UTF8toUCS2Code(g_Result,s);

vm_graphic_textout(buf,50,130,s,wstrlen(s),VM_COLOR_BLUE);

}

if(0==g_show_info)

{

return;

}

}

4.7项目扩展

4.7.1要求

(1)仿照IPSearch软件,做一个QQ是否在线查询的软件

4.7.2实现思路

(1)利用www.提供的开放接口,仿照上述开发过程实现

(2)QQ在线查询的URL为:

“webservices/qqOnlineWebService.asmx/qqCheckOnline?

qqCode=”

5、项目总结报告

项目总结报告

项目名称

开发环境配置与搭建

项目组成员

完成情况

□全部完成□大部分完成

□少部分完成□没有思路

自我评分

代码规范度

项目中遇到的主要问题及解决办法

项目体会

自我评定

修改应用程序的图标和标题

界面设计及框架搭建

资源加载及UI界面绘制

网络连接

数据解析

结果显示

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1