我正在使用Volley在Android上执行休息请求。当我进行登录尝试时,它无法给出响应,而是返回一个空响应。
服务器端工作正常,我在Android客户端收到空响应。 这是我写的代码:
HashMap<String, String> params = new HashMap<String, String>();
params.put("email", "nifras.personal@gmail.com");
params.put("password", "123456");
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
urlJsonObj, new JSONObject(params), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
Toast.makeText(getApplicationContext(),
response.toString(),
Toast.LENGTH_LONG).show();
hidepDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
// hide the progress dialog
hidepDialog();
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq);
答案 0 :(得分:2)
尝试使用Map和Object(我也将它用于String),如下所示:
Map<String, Object> jsonParams = new HashMap<>();
jsonParams.put("param1", getParam1());
jsonParams.put("param2", getParam2());
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(jsonParams),
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response)
{
// ...... you know the rest
顺便说一句,400通常是错误的请求(如果我的内存正确地为我服务),所以我会在发送之前打印JSON对象,看看它是否正是服务器所期待的,您可以使用Postman进行检查,可能更容易(使用Chrome的REST客户端版本更容易使用)。
快速且肮脏打印方式:
Map<String, Object> jsonParams = new HashMap<>();
jsonParams.put("param1", getParam1());
jsonParams.put("param2", getParam2());
Log.d("My JSON Object",(new JSONObject(jsonParams)).toString());
希望这有助于。
答案 1 :(得分:1)
此问题的正确答案如下所示。在此版本的请求中,Post参数在Volley的现有getParams()方法中被覆盖。我做的错误是不要覆盖那个方法。
String url = "http://httpbin.org/post";
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonResponse = new JSONObject(response).getJSONObject("form");
String site = jsonResponse.getString("site"),
network = jsonResponse.getString("network");
System.out.println("Site: "+site+"\nNetwork: "+network);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}
) {
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<>();
// the POST parameters:
params.put("site", "code");
params.put("network", "tutsplus");
return params;
}
};
Volley.newRequestQueue(this).add(postRequest);
答案 2 :(得分:0)
使用它来解决您的问题
ArrayList<NameValuePair> arrResult = new ArrayList<NameValuePair>();
arrSchoolResult.add(new BasicNameValuePair("email", ""nifras.personal@gmail.com""));