Android Volley JsonObjectRequest不发送params

时间:2015-10-02 15:19:47

标签: android json android-volley params

我试图用一些参数将JsonObjectRequest发送到我的服务器,但似乎params没有到达服务器。在发布之前我尝试在谷歌中找到所有类型的建议,但没有人工作正常..

这是我的JsonObjectRequest的代码:

RequestQueue queue = MySingleVolley.getInstance(ctx).
            getRequestQueue();

    JsonObjectRequest jsObjRequest = new JsonObjectRequest(method,url,null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d("REQUEST_JSON_TO_SERVER", "Success: " + response.toString());
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("REQUEST_JSON_TO_SERVER", "Error: " + error);
                }
            }){
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        HashMap<String, String> headers = new HashMap<String, String>();
                        headers.put("Content-Type", "application/json");
                        return headers;
                    }
                    @Override
                    protected Map<String, String> getParams() {
                        return params;
                    }
            };

    MySingleVolley.getInstance(ctx).addToRequestQueue(jsObjRequest);

这些是我的参数和其他人:

String url =  "url";

    //create the hashMap of parameters
    database_zappapp db = new database_zappapp(getApplicationContext());
    db.open();
    HashMap<String, String> params = new HashMap<>();
    params.put("action","myAction");
    params.put("nomeutente", db.getUsernameLogged());
    params.put("token", token);
    db.close();


    //Send the request to the server
    Global.RequestJsonToServer(getApplicationContext(), url, Request.Method.POST, params);

提前感谢您的帮助!

修改2

我已经改变了我的参数,创建了一个字符串jsonBody:

JSONObject jsonObject = new JSONObject();
    try {
        jsonObject.put("action","gcmUserRegister");
        jsonObject.put("nomeutente",db.getUsernameLogged());
        jsonObject.put("token",token);
    }catch(JSONException e){
        e.printStackTrace();
    }
    String requestBody = jsonObject.toString();
    db.close();

和我的请求一样使用getBody():

JsonObjectRequest jsObjRequest = new JsonObjectRequest(method,url,null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d("REQUEST_JSON_TO_SERVER", "Success: " + response.toString());
                }
            },new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("REQUEST_JSON_TO_SERVER", "Error: " + error);
                }
            }){
                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError {
                        HashMap<String, String> headers = new HashMap<>();
                        headers.put("Content-Type", "application/json");
                        return headers;
                    }
                    @Override
                    public byte[] getBody() {
                        try {
                            return requestBody == null ? null : requestBody.getBytes("utf-8");
                        } catch (UnsupportedEncodingException uee) {
                            VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s",
                                    requestBody, "utf-8");
                            return null;
                        }
                    }
            };

但已经没有用了! =(

邮递员屏幕:

没有找到用户意味着它输入if语句,因此它可以工作..用android我收到&#34;结果&#34;:&#34; null&#34;

使用app / json的邮递员屏幕:

enter image description here

2 个答案:

答案 0 :(得分:1)

更改代码的这一部分:

 `JsonObjectRequest jsObjRequest = new JsonObjectRequest(method,url,null ...`

对此:

 `JsonObjectRequest jsObjRequest = new JsonObjectRequest(method,url,yourparams..`

原因:如果您使用默认的Volley构造函数,那就是将params发送到Server的方式。

答案 1 :(得分:1)

我找到了解决方案!

问题是服务器不在客户端,我使用POST获取数据但是从客户端我发送了一个json对象所以我的新php是:

$data = json_decode(file_get_contents('php://input'), true);

//echo "Action: ".$action;
//Registrazione del token
if($data['action'] == "gcmUserRegister"){
......

非常感谢BKS !!!