1

Android httpclient (loopj) を使用していくつかのデータを投稿しようとしています。ボディに json データを追加し、リクエスト ヘッダーを設定しました。この問題を解決する方法を知っている人はいますか?

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

    }
4

1 に答える 1

6

投稿する前にこれを書いてください。そうすればうまくいきます。

se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

何らかのエンティティを使用すると、投稿で指定されたコンテンツ タイプが無視され、エンティティのコンテンツが使用される理由。したがって、上記の行で問題が解決します。


ソース コードを調べたところ、コンテンツ タイプのパスpost(..)が無視され、存在する場合はこのエラーがログに記録されることがわかりました。

HttpEntity がコンテンツ タイプを設定するため、渡された contentType は無視されます

ただし、エンティティにコンテンツ タイプを指定すると、機能するので心配する必要はありません。このエラーを取り除くには、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);
            }
        }
于 2014-11-10T11:03:06.303 に答える