在 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。
我必须使用 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。