4

我正在使用 SOAP API 从 magento 服务器获取数据。
我想获取客户列表,并且我想通过过滤器来检索特定的客户列表。我正在使用 hashMap 但它引发了序列化异常。

我的代码就像

{request = new SoapObject(NAMESPACE, "customerCustomerInfo");
            request.addProperty("sessionId", sessionId);
            HashMap<String, Object> filter=new HashMap<String, Object>();
            filter.put("customer_id", condition);
            request.addProperty("filters", filter);}

我也使用过 jsonobject ,简单的 Arraylist ,但它引发了同样的异常。

4

2 回答 2

3

您可以尝试将“HashMap”更改为“HashTable”,并将“MarshalHashtable”注册到您的信封中。

像:

SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11);
androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug=true;
(new MarshalHashtable()).register(env);
// filter
Hashtable <String, String> filter=new Hashtable<String, String>();
filter.put("customer_id", "1");
request.addProperty("filter", filter);

得到了这个建议

“使用参数数组创建请求”在

https://code.google.com/p/ksoap2-android/wiki/CodingTipsAndTricks

于 2013-07-01T17:51:55.193 回答
1

@Ricardo 的回答是正确的,它帮助了我,但我为那些仍然感到困惑的人发布了这个完整的代码。下面的代码将为我获取特定客户的订单。

SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11);   
env.dotNet = false;                                                                  
env.xsd = SoapSerializationEnvelope.XSD;                                             
env.enc = SoapSerializationEnvelope.ENC;                                             
Hashtable hashtable = new Hashtable();                                               
hashtable.put("customer_id", 17);                                                    

SoapObject request = new SoapObject(NAMESPACE, "salesOrderList");                               
request.addProperty("filters", hashtable);                                           
request.addProperty("sessionId", sessionId);                 

env.setOutputSoapObject(request);                                                    

HTttpTransportSE transportSE = new HttpTransportSE(URL);                                              
transportSE.debug=true;                                                              
(new MarshalHashtable()).register(env);     
于 2014-09-03T05:35:18.903 回答