AsyncHttpClient:将忽略Passed contentType,因为HttpEntity设置了内容类型

时间:2014-11-10 10:53:03

标签: android web-services androidhttpclient android-async-http loopj

我尝试使用android httpclient(loopj)发布一些数据。我在其正文中添加了一些json数据并设置了请求标头。但是它显示了AsyncHttpClient:由于HttpEntity设置了内容类型,因此将忽略Passed contentType。有谁知道如何解决这个问题?

 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();
        }

    }

1 个答案:

答案 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);
            }
        }