GitHubDemo https://github.com/smanikandan14/Volley-demo#handling-error-codesjava
Volley源碼 https://github.com/mcxiaoke/android-volley
android
Volley是Android平臺上的網絡通訊庫,能使網絡通訊更快,更簡單,更健壯github
特色 : Volley特別適合數據量不大可是通訊頻繁的場景緩存
Volley提供的功能網絡
JSON,圖像等的異步下載;框架
網絡請求的排序(scheduling)異步
網絡請求的優先級處理ide
緩存this
多級別取消請求
和Activity和生命週期的聯動(Activity結束時同時取消全部網絡請求)
git clone https://android.googlesource.com/platform/frameworks/volley
網絡請求的應用
1. 發起一條基本的HTTP請求
StringRequest(Get請求,無請求參數)
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); // 默認是Get方式 能夠在源碼 StringRequest 類中的構造方法中找到 以下 // public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) { // this(Method.GET, url, listener, errorListener); // } // 第一個參數 訪問的URL, 第二個參數 響應後返回的結果監聽, 第三個參數 響應出錯返回的結果監聽 StringRequest stringRequest = new StringRequest("http://www.baidu.com", new Response.Listener<String>() { @Override public void onResponse(String response) {//請求正確後相應結果 Log.d("TAG", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) {//請求出錯結果 Log.e("TAG", error.getMessage(), error); } }); //設置超時 //DefaultRetryPolicy 中第一個參數 超時時間, 第二個參數最多請求次數, 第三個參數是一個乘數因子, //好比 超時時間是5s,乘數因子是2, 下次請求的時間就是10s後請求 stringRequest.setRetryPolicy(new DefaultRetryPolicy(5000, 2, 2f)); // 設置Tag值 能夠在界面被銷燬時 用來移除該網絡請求 stringRequest.setTag(MYGET_TAG); mQueue.add(stringRequest);
StringRequest(Post請求,無請求參數)
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); // 第一個參數 請求方式, 第二個參數 訪問的URL, 第三個參數 響應後返回的結果監聽, // 第四個參數 響應出錯返回的結果監聽 StringRequest stringRequest = new StringRequest(Method.POST,"http://www.baidu.com", new Response.Listener<String>() { @Override public void onResponse(String response) {//請求正確後相應結果 Log.d("TAG", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) {//請求出錯結果 Log.e("TAG", error.getMessage(), error); } }); //設置超時 //DefaultRetryPolicy 中第一個參數 超時時間, 第二個參數最多請求次數, 第三個參數是一個乘數因子, //好比 超時時間是5s,乘數因子是2, 下次請求的時間就是10s後請求 stringRequest.setRetryPolicy(new DefaultRetryPolicy(5000, 2, 2f)); // 設置Tag值 能夠在界面被銷燬時 用來移除該網絡請求 stringRequest.setTag(MYGET_TAG); mQueue.add(stringRequest);
StringRequest(Post請求,有請求參數)
//這裏的參數是Map形式的 RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); // 第一個參數 請求方式, 第二個參數 訪問的URL, 第三個參數 響應後返回的結果監聽, // 第四個參數 響應出錯返回的結果監聽 StringRequest stringRequest = new StringRequest(Method.POST,"http://www.baidu.com", new Response.Listener<String>() { @Override public void onResponse(String response) {//請求正確後相應結果 Log.d("TAG", response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) {//請求出錯結果 Log.e("TAG", error.getMessage(), error); } }{ @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> map = new HashMap<String, String>(); map.put("param1", "0"); map.put("param2", "5"); return map; } }); //設置超時 //DefaultRetryPolicy 中第一個參數 超時時間, 第二個參數最多請求次數, 第三個參數是一個乘數因子, //好比 超時時間是5s,乘數因子是2, 下次請求的時間就是10s後請求 stringRequest.setRetryPolicy(new DefaultRetryPolicy(5000, 2, 2f)); // 設置Tag值 能夠在界面被銷燬時 用來移除該網絡請求 stringRequest.setTag(MYGET_TAG); mQueue.add(stringRequest);