這裏以post請求說明,get請求相似設置請求頭及超時。
1.自定義request,繼承com.android.volley.Request
2.構造方法實現(basecallback,爲自定義的監聽,實現Response.Listener,ErrorListener接口)--post請求
String params;
public static int SOCKET_TIMEOUT=20000;
public MyRequest(String url,String params, Response.Listener<String> listener, Response.ErrorListener errorListener){
super(Method.POST,url,listener,errorListener);
this.params=params;
}
-
</pre>
3.請求頭設置:重寫getHeaders方法
-
@Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<String, String>(); headers.put("Charset", "UTF-8"); headers.put("Content-Type", "application/x-javascript"); headers.put("Accept-Encoding", "gzip,deflate"); return headers; }
設置字符集爲UTF-8,並採用gzip壓縮傳輸
4.超時設置:重寫getRetryPolicy方法
-
@Override public RetryPolicy getRetryPolicy() { RetryPolicy retryPolicy = new DefaultRetryPolicy(SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); return retryPolicy; }
5.請求參數組裝:重寫getBody方法
-
@Override public byte[] getBody() throws AuthFailureError { return params == null ? super.getBody() : params.getBytes(); }
-
6. 接收到gzip的數據 處理
-
@Override protected Response<String> parseNetworkResponse(NetworkResponse response) { String parsed =getRealString(response.data); return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); }<pre name="code" class="java">private int getShort(byte[] data) { return (int) ((data[0] << 8) | data[1] & 0xFF); } public String getRealString(byte[] data) { byte[] h = new byte[2]; h[0] = (data)[0]; h[1] = (data)[1]; int head = getShort(h); boolean t = head == 0x1f8b; InputStream in; StringBuilder sb = new StringBuilder(); try { ByteArrayInputStream bis = new ByteArrayInputStream(data); if (t) { in = new GZIPInputStream(bis); } else { in = bis; } BufferedReader r = new BufferedReader(new InputStreamReader(in), 1000); for (String line = r.readLine(); line != null; line = r.readLine()) { sb.append(line); } in.close(); } catch (Exception e) { e.printStackTrace(); } return sb.toString(); }