"メソッドは、引数には適用されません" BlackBerryアプリケーションを構築するとき

私は.Net Webサービスを呼び出すためのサンプルアプリケーションを開発しています。 Eclipseのビルドパスにksoap2-j2me-core-prev-2.1.2.jarを追加しました。

私は2つの値をaddProperty経由で渡しています: "number1"と10、また "number2"と20。これはコンパイラエラーを引き起こします:

型SoapObjectのaddProperty(String、Object)メソッドは、引数(String、int)には適用できません。

エラーを解決するにはどうすればよいですか?また、1つの文字列と1つの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;
2

1 答え

BlackBerryの開発はJava-MEで行い、Androidの開発はJava-SEで行うことに注意する必要があります。 Javaでは、プリミティブはオブジェクトではありません。プリミティブは、double、int、float、charなどの値です。

Androidでも、オブジェクトが必要なプリミティブを渡すことはできません。あなたのコードがAndroidで動作する理由は、Java-MEに追加されたJava-MEに追加された機能(自動ボクシング)が原因です。

あなたはそれらをラップすることによってオブジェクトのようになるプリミティブを得ることができます。これがDouble、Integer、Float、Characterクラスの機能です。 Java SEでは、コンパイラーがObject引数として渡されるプリミティブを見ると、自動的にラップされた「Boxed」バージョンに変換されます。この機能はJava-MEには存在しないため、あなた自身でボクシングを行う必要があります。この場合は、次のことを意味します。

rpc.addProperty("number1", new Integer(10));
rpc.addProperty("number2", new Integer(20));
3
追加された