A-A+

J2ME学习笔记之问题看法

2011年06月16日 编程开发 评论 1 条 阅读 13,268 views 次

1.高级api在界面外观上体工的控制很少,不允许定义高层组件的外观。
2.高级api和低级api可以在同一个应用程序中进行使用,但同一时刻只能选择其中一个??即指两者不能同时出现一个屏幕中
3.应该在调用startApp方法后调用getDisplay方法,不推荐在构造函数中进行该方法的调用,因为应用程序管理器在这时可能还未完成它的初始化工作。
4.alert用于通知用户出错及其他一些异常信息
5.Display中的通用方法:addCommand().removeCommand(),isShown(),setCommandListener().
6.对于任意item组件对象必包含以下元素:command数组,它包含关联到这个iten对象上的所有command命令;defautCommand变量;ItemCommandListener的引用;
7.在任意时刻选择摸个菜单项,在CommandAction方法中就可以捕捉到对应的command 及Item组件。
8.image类用于创建图像对象并包含图像高度和宽度,及图像是否可变等描述信息。imaneItem类则定义了如何显示一个图像,具体图像在屏幕上的位置
9.与Alert结合使用的gauge有以下要求:必须是非交互性的;不能同时在其他容器里;Gauge的label必须为null;Gauge不能与Command和CommandListener关联
10.低级用户界面编程的核心任务在于:在canvas类的paint()方法中如何利用Graphics对象进行绘图操作。
11.ticker是Display类的成员变量,因此该对象可以用于高级、低级用户界面api中
12.文本的垂直定位不可以使用Graphics.VCENTER
13.对于同一个事件,高级事件吃力和低级事件处理不会依次发生,也就是说,同一个事件不会被处理两次
14.低级屏幕显示或隐藏时,都会自动触发屏幕显示或隐藏事件,并调用相应的回调方法。在Canvas对象显示之前,会首先调用shownotify方法,Canvas的子类可以对方法进行重载15.Canvas会在它被显示的时候自动调用paint方法,所以程序员不必去调用repaint方法
16.在应用程序中永远不要调用paint方法,只能通过repaint来产生重绘事件,从而间接调用paint方法来绘制屏幕
17.RMS的职责是存储和唯一标识Record,而表示数据的任务则是由应用程序来完成的。
18.Record是任何可以被字节数组表示的数据。
19.删除记录前要确保器没有被打开。
20.GCF具有以下两个特性:基于接口设计,便于扩展;提供创建连接的方法,使用标准的URL简化程序员工作
21.web服务的生命周期:实现一个web service ,使其能够接受和响应soap消息;撰写一个wsdl文件用于描述此web service;将此wsdl发布到UDDI上;其他应用程序(客户端)从UDDI上搜索到该web服务的wsdl;根据你的wsdl,客户端可以编写程序调用该文本service。
22.当使用runnable接口是,不能直接创建所需要的泪的对象并运行它;必须从Thread类的一个实例内部运行它。
23.ksoap的使用:
1)首先使用SoapObject,高度集成的抽象类用于完成SOAP的调用,通过调用它的addProperty方法填写要调用的webservice方法的参数(建议传递参数类型尽量为String类型)
   SoapObject request  = new SoapObject(serviceNamespace, methodName);
   request.addProperty( "username", "user" );
   request.addProperty( "password", "pass" );
2)利用SoapSerializationEnvelope把构造好的SoapObject封装进去。
SoapSerializationEnvelope envelope =new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
3)接下来就要声明  HttpTransport ht = new HttpTransport(serviceURL);ht.debug = true;(serviceURl要投递SOAP数据的目标地址)
HttpTransport是一个强大的辅助类,来完成Http-call transport process,它封装了网络请求的一切,你完全不用考虑序列化消息。我们通过设置它的debug属性为true来打开调试信息。
方法HttpTransport.call()自己就能够发送请求给服务器、接收服务器响应并序列化SOAP消息,如下所示:
ht.call(null, envelope);(参数含义:soapAction – SOAP 规范定义了一个名为 SOAPAction 的新 HTTP 标头,所有 SOAP HTTP 请求(即使是空的)都必须包含该标头。 SOAPAction 标头旨在表明该消息的意图。通常可以置此参数为null,这样HttpTransport就会设置HTTP标头SOAPAction为空字符串;Envelope – 就是前面我们构造好的SoapSerializationEnvelop对象。)
注:kSOAP2相当于把webservice方法名分离出去,完全交给SoapObject去封装,而HttpTransport仅仅负责把SoapEnvelope发送出去并接收响应,这样更合理一些。   
4)调用call方法是一个同步过程,需要等待它返回。返回之后,就可以调用SoapSerializationEnvelope的getResult方法来获取结果了:
Object Response = envelope.getResult();
5)如果HttpTransport的debug属性为true,那么此时就可以通过System.out.println("Response dump>>" + tx.responseDump);打印出HttpTransport的调试信息。尤其当前面call方法和getResult方法发生异常时,这个调试信息是非常有用的。
注:由于HttpTransport类实际上是调用了HttpConnection作网络连接,所以必须另起一个线程来专门做kSOAP工作,否则会堵塞操作。
24.NET 要求将 HTTP SOAPAction 头用来标识所请求的操作;其格式是服务的名称空间后跟操作名,中间用 / 隔开(例如, urn:Example1/sayHello )。
25..NET 采用了一种不同的办法,它通过一种基于属性的机制来实现对 SOAP 消息的操作。这些属性与 C# 方法或类关联,让用户去控制 SOAP 消息中 XML 的格式。例如:[WebService(Namespace="urn:Example1")]
将把 Web 服务的名称空间(namespace)属性设置成 urn:Example1
26.SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPCrepresentation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。
27.soap采用 XML 进行消息编码,正确的处理需要服务器和客户端本身来执行,理解和执行彼此使用的信息格式(ONE-TO-ONE,REQUEST/REPLY,BROADCAST,ETC),应用程序本身在语义解析中扮演着十分重要的角色!!!
28.soap就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互
29.运行机理:客户端发送请求时,不管客户端是什么平台的,首先把请求转换成XML格式,SOAP网关可自动执行这个转换。为了保证传送时参数,方法名,返回值的唯一性,SOAP协议使用了一个私有标记表,从而服务端的SOAP网关可以正确的解析。转化成XML格式后,SOAP终端名(远程调用方法名)及其他的一些协议标识信息被封装成HTTP请求,然后发送给服务器。如果应用程序要求,服务器返回一个HTTP应答信息给客户端。与通常对HTML页面的HTTP GET请求不同的是,此请求设置了一些HTTP HEADER,标识着一个SOAP服务激发,和HTTP包一起传送。例如:对于一个询问股票价格的应用程序,服务器端具有组件提供某股票当前的价格,组件是COM或CORBA在服务器上建立的。客户端发送一个SOAP请求给服务器询问股票价格。服务器依赖于服务器上的SOAP网关,使用内嵌的HTML对象调用合适的方法,然后把得到的价格通过SOAP应答传给客户端。

标签:
Copyright © 风恋尘香 保留所有权利.   Theme  Ality

用户登录