2016-02-05 99 views
2

我试图从GET请求发送一些认证报头,我试图用Volley JsonObjectRequest电话:凌空JsonObjectRequest发送的报头的GET请求

Map<String,String> params=new HashMap<String,String>(); 
     params.put("token","fghjbvjhnjjk"); 
     activity.showDialog(); 
     JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET,url, 
       new JSONObject(params), 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(); 
       } 
      } 
     }); 
     req.setShouldCache(true); 

但其显示:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference 
     at com.android.volley.Request.<init>(Request.java:136) 
     at com.android.volley.toolbox.JsonRequest.<init>(JsonRequest.java:58) 
     at com.android.volley.toolbox.JsonObjectRequest.<init>(JsonObjectRequest.java:47) 

我读的地方您可以通过制作hashmap来传递标题,从而使用该参数创建新的JsonObject。也许这将在POST请求上起作用。请帮助..

+0

这是本“Request.java:136 “从上面的代码行吗? –

+0

这是来自凌云图书馆的请求类。 –

+0

只是试图'受保护的地图 getParams(){ Map params = new HashMap <>();'可能会帮助你 –

回答

10

好了,事情很简单,非常精确。将头传递给GET或POST请求,您需要覆盖JsonObjectRequest类中的getHeaders方法。这是怎么会做:

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; 
      } 
     }; 
0

您可以在Request.Method.GET方法简单地使用如下

public void methodName(String url,String perameter){ 
url = url +"?"+ perameters; 

JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET,url, 
      new JSONObject(params), new Response.Listener<JSONObject>() { 
/// your other code 
} 

其中perameters是

perameters = "username=xyz&password=asd123E1&mobile=34563423" 
+0

仍然无法正常工作..同样的错误显示出来.. –