2016-02-05 40 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

仍然無法正常工作..同樣的錯誤顯示出來.. –