我必须使用post方法将一个整数列表发送到Web服务。该服务重新排序此列表并将其返回给我。到目前为止,该服务工作正常。我在SoapUI中测试了它,它成功重新排序我的列表并返回。但是,我不能在Android上使用它。更详细的说,我有清单;
List<Integer> productIds;
我已经编写了以下方法来调用服务;
public void getSortedProductIds(boolean sync, AsyncHttpResponseHandler handler, List<Integer> productIds, Activity context) throws JSONException, UnsupportedEncodingException {
initClient(sync);
JSONObject jsonParams = new JSONObject();
jsonParams.put("productIds", productIds);
StringEntity entity = new StringEntity(jsonParams.toString());
System.out.println(entity);
httpClient.post(context, WS_BASE_URL + "picker/sortbycategory", entity, "application/json",
handler);
return;
}
在Android方面,我执行以下操作来运行此代码;
getSortedProductIds(true, new AsyncResponseHandler() {
@Override
public void onSuccess(int status, Header[] header, byte[] response) {
JSONObject jsonObj = ResponseUtils.byteArrayToJsonObj(response);
JSONArray jsonArr;
try {
jsonArr = jsonObj.getJSONArray("result");
for (int i = 0; i < jsonArr.length(); i++) {
System.out.println(jsonArr.getInt(i));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onFailureAction(int status, Header[] header, byte[] responseBody, Throwable exception) {
System.out.println("fail");
}
}, productIds, this);
但是它始终以onFailure
方法结束。我无法从SA的任何解决方案中获得帮助。这可能有什么问题?我们如何使用post方法发送整数列表?感谢
答案 0 :(得分:1)
问题解决了。问题是我想发送一个整数数组,但是我发送一个服务端无法识别的JSON对象;
jsonParams.put("productIds", productIds);
此JSON对象包含正确的值且有效,但该服务直接需要一个数组(一个JSON数组)。它无法知道有一个带有&#34; productIds&#34;的数组。这个对象里面的键。所以,我不得不发送一个JSONArray。首先,我形成了我的JSON数组;
JSONArray x = new JSONArray();
for(Integer productId : productIds){
x.put(productId);
}
然后我创建了StringEntity并通过post方法传递它。
StringEntity entity = new StringEntity(x.toString());
httpClient.post(context, WS_BASE_URL + "picker/sortbycategory", entity, "application/json",
handler);
如果有人遇到这样的问题,只需以JSON格式发送确切的对象/数组。