我正在开发一个黑莓应用程序。我需要调用soap webservices,但我无法这样做,并且得到null
作为回复。以下是我的代码:
private static final String CONNECTION_PARAMS = ";deviceside=true";
SoapObject request = new SoapObject("http://service.action.com/",
"findActiveSecurities");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
HttpTransportBasicAuth ht =
new HttpTransportBasicAuth("http://myurl.com/ebclient/services/MobileClientService?wsdl"+CONNECTION_PARAMS,
"myusername",
"mypassword");
PropertyInfo propInfo=new PropertyInfo();
propInfo.type=PropertyInfo.INTEGER_CLASS;
//adding parameters
request.addProperty("arg0","NSE");
request.addProperty("arg1","0");
request.addProperty("arg2","100");
envelope.setOutputSoapObject(request);
try {
ht.call(SOAP_ACTION, envelope);
result = (SoapObject)envelope.getResponse();
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
结果我得到null。请查看代码并帮我纠正它。 提前致谢
答案 0 :(得分:2)
实际上问题不是将0和100传递为String ...
request.addProperty("arg0","NSE");
request.addProperty("arg1","0");
request.addProperty("arg2","100");
我用
request.addProperty("arg0","NSE");
request.addProperty("arg1",new Integer(0));
request.addProperty("arg2",new Integer(1000));
在问这个问题之前,我还面临着模拟器没有识别出库的问题。它显示错误消息,例如“没有库Ksoap2_j2me.jar” - 已解决from this link。
很抱歉英语不好,但我认为这可以节省其他开发人员的时间。
答案 1 :(得分:1)
很难说你发布了什么,但我的猜测是你遇到了某种网络问题。我猜你初始化result = null;
,然后你的ht.call()
号召唤IOException
,留下结果null
。
您正在使用ksoap2,它是为通用J2ME客户端编写的库。但是,BlackBerry网络不能像所有其他J2ME平台一样工作。
您正在使用您的连接params字符串控制BlackBerry网络 transport ,该字符串是硬编码的:
private static final String CONNECTION_PARAMS = ";deviceside=true";
不幸的是,此字符串后缀可能不适合所有网络条件(或任何,如果您没有正确的设备APN设置)。
我认为你有几个选择:
您可以尝试动态选择正确的后缀字符串,具体取决于您的应用运行时的条件。例如,这可以允许设备通过Wi-Fi连接(如果可用),或者通过BES连接(如果可用)。 BlackBerry新手开发人员可能会对应用程序代码需要担心这一点感到惊讶(阅读here for more或watch this)。
如果您想简单地用动态字符串替换CONNECTION_PARAMS
,可以查看implementation here。
在OS 5.0中,BlackBerry添加了ConnectionFactory类,这比必须组装连接字符串的旧方法有了很大改进。如果您只需要支持OS 5.0及更高版本,则可以选择重写代码以使用ConnectionFactory
。
由于您可以访问the ksoap source code,因此您可以更改它。看起来连接代码位于ServiceConnectionMidp.java:
public ServiceConnectionMidp(String url) throws IOException {
connection = (HttpConnection) Connector.open(url, Connector.READ_WRITE, true);
}
您可以将类更改为the connection from a ConnectionFactory,而不是将连接参数附加到传递给此类的url
,而是自定义以支持您想要的网络传输。
这样做意味着如果您想更新代码以使用新版本的ksoap2,则需要再次进行修改。但是,考虑到BlackBerry Java的未来,这似乎是一个合理的妥协。