«метод не применим для аргументов» при сборке приложения BlackBerry - PullRequest
2 голосов
/ 28 октября 2011

Я разрабатываю пример приложения для вызова веб-сервисов .Net.Я добавил ksoap2-j2me-core-prev-2.1.2.jar к пути сборки в Eclipse.

Я передаю два значения через addProperty: «число1» и 10 как целое число, а также «число2» и 20. Это вызывает ошибку компилятора:

Метод addProperty (String, Object) в типе SoapObject не применим для аргументов (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 Ответ

3 голосов
/ 28 октября 2011

Вы должны знать, что разработка 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));
...