使用Android </integer>中的POST方法发送列表<integer>

时间:2015-01-17 20:03:31

标签: android json post arraylist

我必须使用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方法发送整数列表?感谢

1 个答案:

答案 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格式发送确切的对象/数组。