在请求正文中发送JSON

时间:2016-03-17 05:38:02

标签: android

我想在请求正文中发送JSON。服务器将期望请求标头指示正文是JSON。

这是我的代码:

JSONObject data = new JSONObject();
        try {
            data.put("id", username);
            data.put("latitude", latitude);

RequestQueue queue = Volley.newRequestQueue(this);

        JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,url,data,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        System.out.println(response);
                        //hideProgressDialog();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d("TAG", "Error: " + error.getMessage());
                       // hideProgressDialog();
                    }
                });
        queue.add(jsObjRequest);
    }

当我运行程序时,我得到BasicNetwork.performRequest: Unexpected response code 400为“url”。 请帮我解决这个问题

3 个答案:

答案 0 :(得分:0)

试试此代码

  RequestParams data = new RequestParams();
        data.put("id", username);
        data.put("latitude", latitude);

RestClient.post(getHost() + "url", data,
        new JsonHttpResponseHandler() {

    @Override
    public void onSuccess(int statusCode, Header[] headers,
            JSONObject response) {

        try {

            //process JSONObject obj 
            Log.w("myapp","success status code..." + statusCode);

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(int statusCode, Header[] headers,
            Throwable throwable, JSONObject errorResponse) {
        Log.w("myapp", "failure status code..." + statusCode);


        try {
            //process JSONObject obj
            Log.w("myapp", "error ..."  + errorResponse.getString("message").toString());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
});

答案 1 :(得分:0)

您缺少有关标头内容类型的信息。在请求对象中覆盖以下方法。

 JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,url,data,
                new Response.Listener<JSONObject>() {

//other methods

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Content-Type", "application/json; charset=utf-8");
        return headers;
    }
});

答案 2 :(得分:0)

400表示客户端错误,这意味着您发送的json或标头错误。只需在

之上的JsonObjectRequest方法下添加以下代码块
 @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headerMap = new HashMap<String,String>();
            headerMap.put("Content-Type", "application/json");
            headerMap.put("Accept", "application/json");
            return headerMap;
        }

如下所示

  JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,url,data,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    System.out.println(response);
                    //hideProgressDialog();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    VolleyLog.d("TAG", "Error: " + error.getMessage());
                   // hideProgressDialog();
                 }
            }){
                 @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headerMap = new HashMap<String,String>();
            headerMap.put("Content-Type", "application/json");
            headerMap.put("Accept", "application/json");
            return headerMap;
        }
           };
    queue.add(jsObjRequest);