我正在开发一个示例应用程序来调用.Net Web服务。我已将ksoap2-j2me-core-prev-2.1.2.jar添加到Eclipse中的构建路径中。
我通过addProperty传递两个值:“number1”和10作为整数,还有“number2”和20.这会导致编译错误:
SoapObject类型中的方法addProperty(String,Object)不适用于参数(String,int)
如何解决错误,如何将一个字符串和一个int值传递给addProperty?我在Android中以相同的方式完成了这项工作,它在那里工作正常。
String serviceUrl = "URL to webservice";
String serviceNameSpace = "namespace of web service";
String soapAction = "URL to method name";
String methodName = "Name of method";
SoapObject rpc = new SoapObject(serviceNameSpace, methodName);
//compiler error here
rpc.addProperty("number1", 10);
rpc.addProperty("number2", 20);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet = true;//IF you are accessing .net based web service this should be true
envelope.encodingStyle = SoapSerializationEnvelope.ENC;
HttpTransport ht = new HttpTransport(serviceUrl);
ht.debug = true;
ht.setXmlVersionTag("");
String result = null;
try
{
ht.call(soapAction, envelope);
result = (String) (envelope.getResult());
}
catch(org.xmlpull.v1.XmlPullParserException ex2){
}
catch(Exception ex){
String bah = ex.toString();
}
return result;
答案 0 :(得分:3)
您需要注意,BlackBerry开发是使用Java-ME完成的,而Android开发是使用Java-SE完成的。在Java中,基元不是对象。基元是double,int,float,char等值。
即使在Android中,也无法传递预期对象的基元。你的代码在Android中运行的原因是因为Java-SE中添加了一个不在Java-ME中的功能,称为自动装箱。
您可以通过包装它们来使基元成为对象。这就是Double,Integer,Float和Character类的功能。在Java SE中,当编译器将原语作为Object参数传递时,它会自动转换为包装或“盒装”版本。 Java-ME中不存在此功能,因此您必须自己进行装箱。在这种情况下,这意味着:
rpc.addProperty("number1", new Integer(10));
rpc.addProperty("number2", new Integer(20));