在 json 对象参数 Volley post 中发送令牌头

Posted

技术标签:

【中文标题】在 json 对象参数 Volley post 中发送令牌头【英文标题】:Send token header in json object paramater Volley post 【发布时间】:2019-03-19 18:59:13 【问题描述】:

我在 volley 中使用 post 方法。我搜索并发现getHeader()用于在请求中发送标头。解决方案是使用JSONObject request而不是字符串请求(我目前正在使用)但是有没有办法通过这种方法发送标头?因为在那种情况下,我将不得不修改许多类中的大量代码。对不起英语,我不是母语人士。 请求参数是一个 json 对象。我正在使用以下代码发送参数。

mRequestQueue = Volley.newRequestQueue(getContext());
    mStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() 
        @Override
        public void onResponse(String response) 
            Log.d("Response", "onResponse: " + response);

        
    , new Response.ErrorListener() 
        @Override
        public void onErrorResponse(VolleyError error) 
            Log.i("This is the error", "Error :" + error.toString());
        
    )

            @Override
            public String getBodyContentType() 
                return "application/json";
            

            @Override
            public byte[] getBody()  throws AuthFailureError 
                HashMap<String, String> params2 = new HashMap<String, String>();
                params2.put("AssigneeId",userid);
                params2.put("IssueStatus", "5");
                return new JSONObject(params2).toString().getBytes();
            
 ;
        mRequestQueue.add(mStringRequest);

【问题讨论】:

How to set custom header in Volley Request的可能重复 不,@VivekMishra 我今天早些时候回答了这个问题。它使用 'Map getHeaders() throws AuthFailureError' 而我使用 'public byte[] getBody() throws AuthFailureError' 正如问题中提到的,我知道有一种方法使用 jsonobject 数组而不是字符串请求。跨度> @VivekMishra 请立即阅读问题。谢谢 getBody() 与 getHeaders() 方法有什么关系? 【参考方案1】:

此请求也有 StringRequest。请以这种方式使用getHeaders():

 public void requestWithSomeHttpHeaders() 
        RequestQueue queue = Volley.newRequestQueue(this);
        String url = "http://www.somewebsite.com";
        StringRequest getRequest = new StringRequest(Request.Method.GET, url, 
            new Response.Listener<String>() 
            
                @Override
                public void onResponse(String response) 
                    // response
                    Log.d("Response", response);
                
            , 
            new Response.ErrorListener() 
            
                @Override
                public void onErrorResponse(VolleyError error) 
                    // TODO Auto-generated method stub
                    Log.d("ERROR","error => "+error.toString());
                
            
        )      
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError  
                    Map<String, String>  params = new HashMap<String, String>();  
                    params.put("User-Agent", "Nintendo Gameboy");  
                    params.put("Accept-Language", "fr");

                    return params;  
            
        ;
        queue.add(getRequest);

    

对于 JsonObjectRequest

JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET,url,
                null, new Response.Listener<JSONObject>() 

            @Override
            public void onResponse(JSONObject response) 
                Log.d(tag, response.toString());
                activity.hideDialog();
                try 
                    activity.onRequestServed(response, code);
                 catch (JSONException e) 
                    e.printStackTrace();
                
            
        , new Response.ErrorListener() 
            @Override
            public void onErrorResponse(VolleyError error) 
                VolleyLog.d(tag, "Error: " + error.getMessage());
                Log.e(tag, "Site Info Error: " + error.getMessage());
                Toast.makeText(activity.getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();
                activity.hideDialog();
                try 
                    activity.onRequestServed(null,code);
                 catch (JSONException e) 
                    e.printStackTrace();
                
            
        ) 

            /**
             * Passing some request headers
             */
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError 
                HashMap<String, String> headers = new HashMap<String, String>();
                //headers.put("Content-Type", "application/json");
                headers.put("key", "Value");
                return headers;
            
        ;

【讨论】:

以上是关于在 json 对象参数 Volley post 中发送令牌头的主要内容,如果未能解决你的问题,请参考以下文章

Volley - POST/GET 参数

带有标头和原始 json 正文的 Volley POST 请求

Android Volley 如何使用 volley 在 POST 请求中发送用户名和密码以及其他参数

使用 Volley 发送带有 JSON 数据的 POST 请求

Volley JsonObjectRequest Post 参数不再起作用

Volley Android中带有JSON正文的POST请求