【问题标题】:Using String Envelope on Ksaop Android在 Ksaop Android 上使用字符串信封
【发布时间】:2014-03-10 12:52:28
【问题描述】:

我想知道如何在我的 Soap 调用方法中使用字符串信封。这是我的信封:

String soapEnvelope = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:tem=\"http://tempuri.org\">\n"
      + "<soap:Header/>\n"
      + "<soap:Body>\n"
       + "<tem:GetItems>\n"
        + "<tem:catId>"+categoryId+"</tem:catId>\n"
        + "</tem:GetItems>\n"
     + "</soap:Body>\n"
  + "</soap:Envelope>\n";

我一般用

SoapObject request = new SoapObject(NAMESPACE, METHODNAME_MAINCATEGORIES);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransportSe = new HttpTransportSE(URL);
httpTransportSe.debug = true;
SoapObject response = null;

try{
  httpTransportSe.call(SOAP_ACTION, envelope);
  response = (SoapObject)envelope.getResponse();
  SoapObject main = (SoapObject)response.getProperty(1);
  SoapObject list = (SoapObject)main.getProperty(0);

  //String a = Integer.toString(list.getPropertyCount());
  //Log.i("property count", a);

  for(int i = 0; i<list.getPropertyCount(); i++){
    Categories c = new Categories();
    SoapObject nsoap = (SoapObject)list.getProperty(i);

    if(nsoap != null){
      c.setId(nsoap.getProperty("Id").toString());
      c.setMainId(nsoap.getProperty("MainID").toString());
      c.setName(nsoap.getProperty("Name").toString());
    }
  }
}
catch(Exception e){
  e.printStackTrace();
}
return categories;

一种方法。但是我需要在这个调用中添加一个参数,它是一个整数值。我尝试添加

request.addParameter("myValue", myValue);

其中 myValue 是调用此函数所需的参数。以下是部分代码:

public ArrayList<Item> getItems(int myValue){
  SoapObject request = new SoapObject(NAMESPACE, METHODNAME_ITEMS);
  request.addProperty("myValue", myValue);
  Log.i("catId", String.valueOf(myValue));
  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
  envelope.dotNet = true;
  envelope.setOutputSoapObject(request);
  HttpTransportSE httpTransportSe = new HttpTransportSE(URL);
  httpTransportSe.debug = true;
  SoapObject response = null;

我尝试了 String 和 int myValue params,请求始终返回为“myValue”0(即使您输入 1、2、3、4 等,它也会返回 0 的项目)。我进行了一项研究并了解到我需要创建一个信封并在那里提供我的参数。现在我创建了一个上面给出的字符串信封,我将如何将它集成到我的通话中?感谢您的回答!

【问题讨论】:

    标签: android soap envelope


    【解决方案1】:

    尝试添加参数如下

    SoapObject request = new SoapObject(NAMESPACE, METHODNAME_ITEMS);
    PropertyInfo paraId = new PropertyInfo();
    paraId.setName("YOUR PARAMETER NAME");
    paraId.setValue("YOUR PARAMETER VALUE");
    paraId.namespace=NAMESPACE;
    paraId.setType(String.class); // or INTEGER whatever your type is...
    request.addProperty(wallpaperCatId);
    

    【讨论】:

    • 感谢您的回答,但我之前也尝试过,结果仍然相同,返回就像我的参数在每个参数上都是 0。
    • 你在使用 KSOAP2 库吗?
    • 是的,“ksoap2-android-assembly-3.1.1-jar-with-dependencies.jar”。
    • 尝试使用这个“ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar”,因为我在 3.1.1 版本上也遇到了一些问题。
    • 我能够通过修复我的命名空间使其与 request.addProperty 一起工作,它是“tempuri.org”,而它必须是“tempuri.org”。一个“/”引起了麻烦。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多