`
yesjavame
  • 浏览: 687227 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Symbian学习笔记(18) - 初探Web Services API 的使用(中)

阅读更多

继续刚才的,现在来看具体代码,先是ConnectL的实现:

void CWebEngine::ConnectL()

	{

		CSenXmlServiceDescription* pattern = CSenXmlServiceDescription::NewLC();	

		pattern->SetFrameworkIdL(KDefaultBasicWebServicesFrameworkID);

		pattern->SetEndPointL(KWSEndPoint);

		delete iConnection;

		iConnection = NULL;

		iConnection = CSenServiceConnection::NewL(*this, *pattern);

		CleanupStack::PopAndDestroy(pattern); 

	}

这里注意一点与那个AddressBook例子不同的是我们声明了不同框架类型是KDefaultBasicWebServicesFrameworkID,并且这样只需要提供EndPoint而不需要Contract了。KWSEndPoint的值是在CPP前声明了:_LIT8(KWSEndPoint,"http://192.168.0.201/uim/PService.asmx");

CSenServiceConnection::NewL的两个参数,一是自己(即MSenServiceConsumer)负责处理回调,二是一个CSenXmlServiceDescription负责参数配置。

在回调SetStatus中我只是简单地打印出状态值。

再看那个SayHello的实现吧,在这个函数中要负责封装SOAP消息包,这时我才遇到了使用Symbian的WebServiceAPI烦人的问题:原来这个SOAP包要自己封装啊!同样SOAP的结果也要自己去解析!!

void CWebEngine::SayHello()

	{

		if(iConnectionState==1){

			//send 

			CSenSoapEnvelope  *env = CSenSoapEnvelope::NewL();

			CleanupStack::PushL(env);

			

			env->SetSoapActionL(KWSContract);	

			env->BodyL().AddElementL(KWSNamespace,KWSHelloworld);

			iConnection->SendL(*env);

			

			CleanupStack::PopAndDestroy(env);

		}

	}

好在HelloWorld不需要参数,所以这个SOAP请求还算简单,注意这个SetSoapActionL函数它的KWSContract就是那个"urn:pservice:helloworld" (见上篇中的SOAP请求描述)。因为CSenSoapEnvelope同样派生于CSenBaseFragment,所以它的Body也可以增加下级节点,上面的代码很好理解。

一旦调用了iConnection->SendL以后,手机会弹出选择接入点,说明这里开始连接网络了,得到结果后,我们回调HandleMessageL中处理结果。

void CWebEngine::HandleMessageL(const TDesC8& aMessage)

	{

		RDebug::Printf("===================HandleMessageL");

		LOG_ALL(aMessage);

		SetReader(*iXmlReader);

		ParseL(aMessage);

	}

这里我们将得到的结果(完整的SOAP响应的XML内容)交给iXmlReader去解析,于是此时又会涉及到另两个回调StartElement和EndElement。注意这里补充一下iXmlReader的初始化在WebEngine的ConstructL中完成:

void CWebEngine::ConstructL()

	{

		LOG_OPEN();

		CSenBaseFragment::BaseConstructL(KQueryResponseLocalName);

		iXmlReader = CSenXmlReader::NewL();

	}

两句话:一是因为自己是派生于CSenBaseFragment,所以先调用BaseConstructL构造一下自己是一个HelloWorldResponse标签的XML节点。二是构造出iXmlReader实例。

下面继续说解析XML的回调处理:

void CWebEngine::StartElementL(const TDesC8& aNsUri,    const TDesC8& aLocalName,   const TDesC8& aQName, const Xml::RAttributeArray& aAttrs)

{

RDebug::Printf("================StartElement");	 



_LIT(KFmt,"StartElement (%s)");

LOG_FORMAT((KFmt,aLocalName));

		 	

if(aLocalName==KQueryResponseLocalName){

		 		

delegate = CHelloWorldResult::NewL(aNsUri,aLocalName,aQName);

CleanupStack::PushL(delegate);

DelegateParsingL(*delegate);

CleanupStack::Pop(delegate);

}

 }

void CWebEngine::EndElementL(const TDesC8& aNsUri,  const TDesC8& aLocalName, const TDesC8& aQName)

 {

RDebug::Printf("==================EndElement");

_LIT(KFmt,"EndElement (%s)");

LOG_FORMAT((KFmt,aLocalName));

		 	

CSenBaseFragment::EndElementL(aNsUri, aLocalName, aQName);

 }

这个EndElement没啥好说的,就是调一下老子的EndElement罢了。倒是那个StartElement函数它在遇到HelloWorldResponse标签时会交给delegate去处理下级节点,就是说<HelloWorldResponse>以下的XML内容由CHelloWorldResult类的负责处理了。

分享到:
评论

相关推荐

    Sun官方提供的纯Java的SIP开发包(JAIN-SIP-API-1.2.jar)

    Sun官方提供的纯Java的SIP开发包(JAIN-SIP-API-1.2.jar) 提供黑莓(Blackberry),塞班(Symbian)等移动平台的SIP开发。

    symbian学习笔记(超级经典-适用于初学者)

    本学习笔记旨在为初学者提供全面、细致的Symbian操作系统知识,帮助你快速入门并深入理解其工作原理。 一、Symbian系统概述 Symbian操作系统最初由英国的EPOC公司开发,后被诺基亚收购并成为其主要的操作系统平台。...

    Symbian学习笔记

    这些学习笔记涵盖了Symbian开发的多个关键方面,包括调试、基础概念、应用框架、图形用户界面(GUI)开发、多线程处理、定时器、系统集成以及网络通信。 1. **Debug On Device**: 在设备上进行调试是开发过程中的...

    Symbian OS End-to-End HTTP API Example

    《Symbian OS End-to-End HTTP API 示例详解》 Symbian OS 是一款历史悠久的移动操作系统,曾经广泛应用于诺基亚等手机厂商的高端设备上。...通过实践与学习,可以有效提升Symbian OS上的网络编程能力。

    Symbian_OS_End-To-End_HTTP_API_Example_v1_2_en

    使用案例部分详细介绍了移动客户端和Web UI之间的交互,包括任务加载、任务完成、密码更改、任务添加、删除、修改以及发送短信等操作。每个案例都包含了交互图和关键类的描述,有助于开发人员理解不同场景下的数据流...

    symbian学习笔记,全28讲

    【Symbian学习笔记概述】 Symbian操作系统是一款曾经广泛应用于智能手机的操作系统,尤其在诺基亚手机上占据主导地位。对于想要学习Symbian开发的初学者来说,理解其开发环境的搭建至关重要。本系列笔记共28讲,...

    Symbian_OS_End-to-End_HTTP_API_Example_v1_2.zip

    《Symbian OS End-to-End HTTP API 示例详解》 ...通过学习这个例子,开发者不仅可以提升在网络编程方面的技能,还能更好地适应Symbian OS的编程环境。无论是对于 Series 60 还是 Series 80 的应用开发,都能从中受益。

    塞班论坛----塞班证书签名程序

    塞班论坛是一个专门为塞班(Symbian)操作系统用户提供交流平台的社区,其中涉及了大量的技术讨论和资源分享。本文将详细介绍“塞班证书签名程序”的相关知识点,以及如何使用DOSPY签名工具v2.2.9.0627.exe来给SIS或...

    Symbian学习笔记(中国移动开发者社区).pdf

    - **官方文档**: Symbian SDK 中通常会包含许多示例代码,这些示例可以帮助开发者理解如何使用特定的功能或 API。 - **在线资源**: 除了 SDK 包含的示例外,还可以通过访问 Nokia Developer Community 等网站获取更...

    Nokia_UI_API_public_1_3_Javadoc.zip_Symbian j2me_nokia-ui_symbia

    7. **Javadoc文档**:压缩包中的"doc"文件夹包含了完整的Nokia UI API 1.3 Javadoc,它是学习和使用API的重要参考资料。Javadoc提供了每个类、方法和接口的详细描述,包括参数、返回值、异常以及使用示例,极大地...

    基于塞班平台的Small-Water游戏设计与实现

    《基于塞班平台的Small-Water游戏设计与实现》是一个典型的毕业设计项目,它涉及到的是在塞班(Symbian)操作系统上开发游戏的过程。塞班系统曾是智能手机市场的主流平台,尤其在功能手机时代,它拥有广泛的用户基础...

    塞班贝拉游戏---贪吃蛇源码

    首先,我们要明确的是,塞班系统(Symbian)是早期智能手机广泛采用的操作系统,尤其在诺基亚手机中非常流行。Java作为一种跨平台的编程语言,为塞班平台提供了丰富的开发环境,使得开发者可以利用Java ME(Java ...

    塞班60 PYTHON API

    **塞班60 PYTHON API** 是一个专为Symbian操作系统设计的Python环境,简化了应用程序开发流程,并为Symbian C++ API提供了一种脚本解决方案。此文档主要介绍的是基于Python 2.2.2版本的Python for S60平台1.3.13版本...

    symbian 学习笔记

    **Symbian操作系统详解** Symbian是一款历史悠久的智能手机操作系统,尤其在2000年至2010年间,它是全球领先的移动设备...通过深入学习和实践,开发者可以从Symbian中学到很多关于移动平台优化和资源管理的宝贵经验。

    S60平台Bluetooth API开发伙伴指南——蓝牙的结构概述

    - **连接建立**:在使用端口API建立连接之前,蓝牙设备必须先与合适的设备建立连接,这通常通过SDP协议完成。 #### 五、服务搜索(SDP) SDP协议分为两大部分: 1. **搜索可用的设备和服务**:在有效范围内搜索...

    Python_API.tar.gz_Python A_pys60 a_python_python api中文_symbian a

    pys60 是一个 Python 的移植版本,专为塞班(Symbian)操作系统设计,使得开发者能够使用 Python 语言在智能手机上创建应用程序。 Python API 在这里指的是 pys60 的 API 文档或库,这可能包括类、函数、模块和接口...

    分享Jquery-UI实现Web桌面系统——jWebOS

    本示例利用了Jquery-UI实现Web桌面系统jWebOS,左侧菜单和桌面菜单的链接都是动态设置。整体效果非常棒。大家可以用于自己的网站建设。 建议开发童鞋使用跨平台开发工具——统一开发环境UDE来进行查看、调试、开发...

Global site tag (gtag.js) - Google Analytics