在 Android 中使用 POST 方法发送列表 <Integer>

Send List<Integer> with POST method in Android

我必须使用 post 方法将整数列表发送到 Web 服务。该服务重新排序此列表并 returns 给我。到目前为止,该服务工作正常。我已经在 SoapUI 中对其进行了测试,它成功地重新排序了我的列表和 returns。但是,我无法从 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 方法发送整数列表?谢谢

问题已解决。问题是我想发送一个整数数组,但是我发送的是服务端无法识别的 JSON 对象;

jsonParams.put("productIds", productIds);

此 JSON 对象包含正确的值并且有效,但服务直接需要一个数组(JSON 数组)。它无法知道这个对象中有一个带有 "productIds" 键的数组。所以,我不得不发送一个 JSON 数组。首先,我形成了 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 格式发送准确的 object/array。