我正在尝试从Magento商店的Android客户端调用Web服务 到目前为止我取得了很大的成功,但没什么问题。
我希望将此数组转换为适当的java Object。
$arrProducts = array(
array(
"product_id" => "1",
"qty" => 2
),
array(
"sku" => "testSKU",
"quantity" => 4
)
);
$resultCartProductAdd = $proxy->call($sessionId, "cart_product.add",
array($shoppingCartId, $arrProducts));
上面的PHP代码取自here
我尝试过的。
Object []addtocart=null;
Log.i("Product Id ", Utils.product_list.get(rowid).getp_Id());
Object[] productdetails1=new Object[]{Utils.product_list.get(rowid).getp_Id(),2};
//Object[] productdetails2=new Object[]{productdetails1};
Object param1[]=new Object[]{Utils.shoppingCartId,productdetails1};
Object param[]=new Object[]{Utils.sessionId,"cart_product.add",param1};
try {
addtocart=(Object[])client.callEx("call", param);
} catch (XMLRPCException e) {
e.printStackTrace();
}
但它会导致错误,如:
org.cws.magentoAnd.xmlrpc.XMLRPCFault: XMLRPC Fault: One item of products do not have identifier or sku [code 1022]
at org.cws.magentoAnd.xmlrpc.XMLRPCClient.callEx(XMLRPCClient.java:228)
at org.cws.magentoAnd.ProductModule.productdetails$CartFunctions.doInBackground(productdetails.java:245)
at org.cws.magentoAnd.ProductModule.productdetails$CartFunctions.doInBackground(productdetails.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
如果对php和Java有双重了解的人能帮我解决这个问题,我会很高兴。
答案 0 :(得分:1)
如果你检查堆栈跟踪,你会看到 > 一项产品没有标识符或sku
因此没有找到sku的映射。关于为什么没有找到映射也很明显。由于php对象是一个关联数组。与之相同的是java对应的Map。
现在,如果我使用像ksoap这样的库进行RPC(基于WebService)调用,我会使用像PropertyInfo这样的东西(http://ksoap2.sourceforge.net/doc/api/org/ksoap2/serialization/PropertyInfo.html)在属性名称及其值之间进行映射。所以它取决于您正在使用的客户端库。
在您使用的代码中
addtocart=(Object[])client.callEx("call", param);
关于客户端的类型,代码片段并不常见,因此我无法猜测您正在使用的库是什么,但是库试图寻找一些实用程序PropertyInfo上的类
答案 1 :(得分:0)
好的,从@ sharadendu sinha's
获得一些想法答案,我在Java中做了一个Associative Array
类似的东西,可以获得所需的结果。
代码如下。
Map map = new HashMap();
map.put("product_id", 1);
map.put("quantity", 1);
Object[] productdetails1=new Object [] {map};
Object param1[]=new Object[]{Utils.shoppingCartId,productdetails1};
Object param[]=new Object[]{Utils.sessionId,"cart_product.add",param1};
try {
Object addtocart=client.callEx("call", param);
Log.i("Out Put of Adding", addtocart.toString());
} catch (XMLRPCException e) {
e.printStackTrace();
}