Volley:如何使用承载访问令牌身份验证发送JSONObject

Max*_*nto 3 android

下午,

我有以下代码:

{
  "criteriaelement": 
 [ 
 { 
   "Value1" : "03",
   "FieldName" : "InventLocationId",
   "Operator" : 0,
  "DataSourceName" : "SalesTable"

   } 
  ]
}


public  JSONObject crear_json_object(){

     JSONObject param= new JSONObject();
     JSONArray criteria_e= new JSONArray();
     JSONObject param_obj= new JSONObject();

     //agregamos los parametros al JSONOBJECT
     try{
         param_obj.put("Value1","03");
         param_obj.put("Operator",0);
         param_obj.put("DataSourceName","SalesTable");
         param_obj.put("FieldName","InventLocationId");


         criteria_e.put(param_obj);   
         param.put("criteriaelement", criteria_e);
         msgResponse.setText(param.toString());

     }catch(Exception e){}      
    return param;

}

private void get_sales_orders() {

    //para enviar objetos json en lugar de null se deben enviar...
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
            Const.ws_Salesorders, crear_json_object(),
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    Log.d(TAG, response.toString());
                    msgResponse.setText(response.toString());
                    //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 {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            headers.put("Authorization", "Bearer "+access_token);
            return headers;
        }
    };

    // Adding request to request queue
    myapplication.getInstance().addToRequestQueue(jsonObjReq,
            "sales");

}
Run Code Online (Sandbox Code Playgroud)

我的jsonobject格式正确(我在google chrome的POST扩展中对此进行了测试),并且当我在此扩展中使用此Web服务时,就可以使用...

但是,将其传递给Volley时,我会收到一个httpstatus代码400,这是一个错误的请求……有人可以帮忙解决这个问题?,我不知道为什么它不起作用,我丢失了什么吗?

aws*_*man 7

我认为这是您需要的:

JSONObject parameters = new JSONObject();
    try {
        parameters.put("key", "value");
    } catch (Exception e) {
    }
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, yourUrl, parameters,new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.i("onResponse", response.toString());
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("onErrorResponse", error.toString());
        }
    }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<>();
            // Basic Authentication
            //String auth = "Basic " + Base64.encodeToString(CONSUMER_KEY_AND_SECRET.getBytes(), Base64.NO_WRAP);

            headers.put("Authorization", "Bearer " + accesstoken);
            return headers;
        }
    };
    queue.add(request);
Run Code Online (Sandbox Code Playgroud)