我想在请求正文中发送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”。
请帮我解决这个问题
答案 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);