在构建BlackBerry应用程序时,“该方法不适用于参数”

时间:2011-10-28 09:52:19

标签: web-services blackberry java-me

我正在开发一个示例应用程序来调用.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;

1 个答案:

答案 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));