如何在android中使用kso​​ap2在soap服务请求中传递自定义对象数组

时间:2015-05-16 16:01:14

标签: android wcf soap android-ksoap2

我想在android中使用kso​​ap2在WCF服务的请求中传递一个对象数组。

我的xml请求如下:

<tem:bookItems>  
    <res:bookItem>
       <res:name>"abcd"</res:name>
       <res:price>150</res:price>
    </res:bookItem>
    <res:bookItem>
       <res:name>"efgh"</res:name>
       <res:price>250</res:price>
    </res:bookItem>
</tem:bookItems> 

我无法找到合适的答案而且我完全陷入了困境。请帮忙。

2 个答案:

答案 0 :(得分:0)

您应该对ksoap2中的org.ksoap2.serialization.KvmSerializable接口感兴趣。

对于任何数组对象,您可以创建public abstract class LiteralArrayVector extends Vector implements KvmSerializable

LiteralArrayVector理想情况下应该遵循:

  1. 注册您的肥皂信封对象

    public void register(SoapSerializationEnvelope envelope, String namespace, String name)

    envelope.addMapping(namespace, name, this.getClass()); registerElementClass(envelope, namespace);

  2. 使用private void registerElementClass(SoapSerializationEnvelope envelope, String namespace)

    定义envelope.addMapping(namespace, "", elementClass);

    Class elementClass = getElementClass();

    //在LiteralArrayVector的具体类中,比如,ArrayOfBookItem覆盖getElementClass()的{​​{1}},以返回super元素类

    类似的东西:

    BookItem

  3. protected Class getElementClass() { return new BookItem().getClass(); }返回元素的名称,&#34; BookItem&#34;

      应该覆盖{li>

      getItemDescriptor getPropertyInfo()KvmSerializable应该包含PropertyInfo

      的名称和类型

      BookItem

      public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) { info.name = getItemDescriptor(); info.type = getElementClass(); }应该覆盖ArrayOfBookItem的{​​{1}},以便它调用register并拥有LiteralArrayVector

      当我说super(...)时,我的意思是将元素的映射添加到new BookItem().register(envelope)

      register(...)

      看看它是否有帮助!!

答案 1 :(得分:0)

经过大量的搜索和调查,找到了一种非常简单的方法来完成上述工作。我刚刚更改了我的服务以接受一个JSON对象数组而不是对象列表。它像魅力一样工作,问题在几分钟内解决了。 这是修改的服务请求,

<tem:bookItems>[{"name": "abcd", "price": "150"}, { "name": "efgh", "price": "250"} ]</tem:bookItems>

从应用程序我们传递对象,

     JSONArray jsonArr = new JSONArray();

            JSONObject bookObj = new JSONObject();
            try {
                bookObj.put("name","abcd");
                bookObj.put("price","150");

            } catch (JSONException e) {
                e.printStackTrace();
            }
            jsonArr.put(bookObj);
        }
        //the below string will be passed to service
        String bookItems = jsonArr.toString();