web-dev-qa-db-ja.com

getHeaderおよびgetParamsの使用中にパラメーターを無視するVolleyPost JsonObjectRequest

2つのヘッダータイプを受け入れるAPIurl = "api adress"を接続しようとしています。application/ jsonはjsonで応答し、application/xmlはxmlで応答します。 jsonパラメーターでJSONをヒットする必要があり、応答もjson形式になります。 Android volley PostリクエストとJsonObjectRequest設定ヘッダーを使用してgetHeadersを使用してサーバーに接続しますが、getParamsを使用してパラメーターを設定することはできません。

RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
            Constants.BASE_URL + Constants.LOGIN, null, response,
            response_error) {
        /**
         * Passing some request headers
         * */
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            return headers;
        }
         @Override
         protected Map<String, String> getPostParams()
         throws AuthFailureError {
         // TODO Auto-generated method stub
            Map<String, String> params = new HashMap<String, String>();
            params.put("key", "value");
            return params;
         }
    };
    // implementation of listeners
    Response.Listener<JSONObject> response = new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            Log.d(TAG, response.toString());
            Log.e("responce", response.toString());

            // msgResponse.setText(response.toString());
            hideProgressDialog();
        }
    };
    Response.ErrorListener response_error = new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("error responce", error.getMessage());
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            hideProgressDialog();
        }
    };
//get params never get called
//i also tried alternative to send params but does not works.
        Map<String, String> params = new HashMap<String, String>();
            params.put("key", "value");
        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
            Constants.BASE_URL + Constants.LOGIN, new JSONObject(params), response,
            response_error) {
        /**
         * Passing some request headers
         * */
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            return headers;
        }
};

    any type of help will be appretiated, Thanks in advance.
11
arslan haktic

VolleyはContent-Type設定を無視します。コンテンツタイプを変更する場合は、getBodyContentTypeメソッドをオーバーライドできます。

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, url,
        new JSONObject(params), response, response_error) {
    @Override
    public String getBodyContentType() {
        return "application/json; charset=utf-8";
    }
}

なぜボレーはあなたのパラメータを無視するのですか?私の別のものを見てください 答え

14
VinceStyling

Volley JsonObjectRequest Postリクエストが機能していません

その投稿から他の答えを取ります:カスタムJSONObjectReuqestを作成できます

0
greenapps