2016-03-17 6 views
0

Я хочу отправить JSON в тело запроса. Сервер ожидает, что заголовок запроса указывает, что это тело 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". Пожалуйста, помогите мне решить эту проблему

ответ

1

Попробуйте этот код

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(); 
     } 
    } 
}); 
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; 
    } 
}); 
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); 
Смежные вопросы