public static void post(Activity context,String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
try {
JSONObject jsonParams = new JSONObject();
JSONObject innerObject = new JSONObject();
innerObject.put("Name", "@MODE");
innerObject.put("ParamType", "8");
innerObject.put("Value", "0");
JSONArray ar = new JSONArray();
ar.put(innerObject);
try {
jsonParams.put("ProcName", "Core.MENUS_SPR");
jsonParams.put("dbparams", ar);
Log.i("jsonParams.toString()",""+jsonParams.toString());
StringEntity se = null;
try {
se = new StringEntity(jsonParams.toString());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return;
}
client.post(context, (url), se, "application/json", responseHandler);
} catch (JSONException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:6)
在发布之前写下它然后它会起作用。
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
原因一旦您使用某个实体,它将忽略在帖子中使用的内容类型并使用实体的内容。因此,上面的行将解决您的问题。
我深入研究了源代码,发现post(..)
中传递的内容类型将被忽略,如果存在则会在日志中出现此错误。
传递的contentType将被忽略,因为HttpEntity设置了内容 型
但是一旦您将内容类型提供给您的实体,请不要担心它会起作用。要删除此错误,您可以在post(..)
中的内容类型中传递null。
来自 AsyncHttpClient.java 的一些代码:
if (contentType != null) {
if (uriRequest instanceof HttpEntityEnclosingRequestBase && ((HttpEntityEnclosingRequestBase) uriRequest).getEntity() != null) {
Log.w(LOG_TAG, "Passed contentType will be ignored because HttpEntity sets content type");
} else {
uriRequest.setHeader(HEADER_CONTENT_TYPE, contentType);
}
}