📄 callwsmidlet.java
字号:
/**
//文档生成日期:2005.8.14
//
//(1)概述:
//类名称:CallWSMIDlet
//类说明:
// 介绍这个应用的Form.
*
//所在子系统:Web Service kSOAP Caller
//
//系统总描述:
http://www.cnblogs.com/zhengyun_ustc/archive/2005/08/27/ksoapmidpwebservice1.html
讲的是
第一小步,Web Service传递String
http://www.cnblogs.com/zhengyun_ustc/archive/2005/08/27/ksoapmidpwebservice2.html
则给出了
第二小步,Web Service传递较为复杂的类
下面我们讲述如何在MIDP设备和Web Service之间传递较为复杂的类,比如这个类中不但有String类型成员变量,还有Vector之类的复杂类型。
从kSoap的FAQ上看,他们推荐使用KvmSerializable以及 ClassMap传递自定义类,但是我一直没有试验成功。
我还是按照能试验出来的办法讲述一下步骤吧:
大致思路就是,在服务器端将类实例按照一定规格(一个一个的成员变量写)序列化为byte[],将这个byte[]数组返回给kSOAP。kSOAP收到之后,再反序列化,将byte[]一段一段地读入类实例。
//(2)历史记录:
//创建人: 郑昀(2005.8.14)
//联系我: Google Talk >> zhengyun@gmail.com
//Blogs: http://blog.csdn.net/zhengyun_ustc/以及http://www.cnblogs.com/zhengyun_ustc
//(3)版权声明:
//遵照GPL协议的大意开放源代码,您可以自由传播和修改,在遵照GPL协议的约束条件的前提下。
////////////////////////////////////////////////////////////////////*/
package com.ultrapower.view;
import java.io.IOException;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import org.ksoap.ClassMap;
import org.ksoap.SoapObject;
import org.ksoap.transport.HttpTransport;
import com.ultrapower.model.*;
import com.ultrapower.tools.MarshalBase64;
public class CallWSMIDlet extends MIDlet implements CommandListener {
private Command exitCommand; // The exit command
private Command connectCommand;
private Display display; // The display for this MIDlet
private Form mainForm;
public CallWSMIDlet() {
display = Display.getDisplay(this);
exitCommand = new Command("退出应用", Command.SCREEN, 3);
connectCommand = new Command("链接Web Service", Command.SCREEN, 2);
mainForm = new Form ("kSOAP调用AlertService!");
}
public void startApp() {
mainForm.addCommand(exitCommand);
mainForm.addCommand(connectCommand);
mainForm.setCommandListener(this);
display.setCurrent(mainForm);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable s) {
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
if (c == connectCommand)
{
//匿名内部Thread,访问远程服务。
Thread fetchThread=new Thread()
{
public void run(){
System.out.println("Try HttpTransport.....");
try {
/*
* Change to run locally on developer machine
*/
String serviceNamespace = "http://10.168.0.223:8080/DominoFacade/services/j2meview";
String methodName = "login";
String serviceUrl = "http://10.168.0.223:8080/DominoFacade/services/j2meview?wsdl";
System.out.println("Try add ClassMap.....");
ClassMap classMap = new ClassMap();
(new MarshalBase64()).register(classMap);
System.out.println("Try new SoapObject.....");
SoapObject request = new SoapObject(serviceNamespace, methodName );
/*
* 添加 web service的输入参数
*/
request.addProperty("username", "user");
request.addProperty("password", "ptw");
System.out.println("Try new HttpTransport.....");
HttpTransport tx = new HttpTransport(serviceUrl, methodName);
tx.setClassMap( classMap );
tx.debug = true;
System.out.println("Try call AlertService.....");
Object Response = tx.call(request);
System.out.println("End call AlertService.....");
System.out.println( tx.responseDump );
byte[] by = (byte[])Response;
System.out.println("End convert to byte[].....");
wsLogin wc = wsLogin.deserialize(by);
System.out.println("Convert wsLogin succ:" +
wc.getReturnCode());
System.out.println("得到的StringVector大小为" +
wc.wsvAllMailSubject.size());
for (int i=0; i<wc.wsvAllMailSubject.size(); i++)
{
System.out.println("第" + i +"封主题:" +
wc.wsvAllMailSubject.getStringAt(i));
}
System.out.println("End convert.");
} catch(IOException e) {
e.printStackTrace();
}
}
};
fetchThread.start();
display.setCurrent(mainForm);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -