在Android POST请求上收到空响应

时间:2015-06-09 07:40:45

标签: android rest android-volley

我正在使用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);

3 个答案:

答案 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""));