我們平時工作中用到的網絡請求無非是HttpClient或者是HttpURLConnection,前者目前已經被完全廢棄了,所以Volley網絡框架裡會有判斷版本,與其自己寫網絡請求接口,不如用Google提供的Volley框架,方便的多,Volley既可以進行普通的網絡請求,也可以請求網絡圖片,今天我先只分享普通的網絡請求,網絡圖標後面再說,先從網上下載Volley源碼,然後引入到工程中,這個不說了,我們進行網絡請求分為兩種,get和post,先看普通的get請求:
RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this);
StringRequest stringRequest = new StringRequest("後台地址", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("fuqiang",response.toString());
}
@Override
public void onResponseHeaders(Map<String, String> headers) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("key","value");
return map;
}
};
mQueue.add(stringRequest);
先定義一個RequestQueue 的隊列,然後定義一個StringRequest,第一個參數是後台地址,第二個參數new Response.Listener是正常返回的結果,第三個參數new Response.ErrorListener()是錯誤返回的結果,getHeaders()是傳遞消息頭,onResponseHeaders是返回的消息頭,最後把StringRequest加入到RequestQueue 的隊列中即可,就這麼簡單,接下來看下Post請求,其實也就是多一個參數,然後多一個getParams返回,進行參數的傳遞而已,看下面代碼:
StringRequest stringRequest = new StringRequest(Request.Method.POST,"後台地址", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("fuqiang",response.toString());
}
@Override
public void onResponseHeaders(Map<String, String> headers) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("key","value");
return map;
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("key","value");
return map;
}
};
第一個參數Request.Method.POST指定網絡請求方式是Post,然後getParams裡可以把網絡請求參數放到HashMap裡,然後傳遞給服務端。
除了StringRequest,還有JsonObjectRequest和JsonArrayRequest,用法和StringRequest類似,只是返回的結果要麼是JSONObject,要麼是JSONArray,如下:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,"後台地址", null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.e("fuqiang",response.toString());
}
@Override
public void onResponseHeaders(Map<String, String> headers) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("key","value");
return map;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("key","value");
return map;
}
};
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST,"後台地址",null,new Response.Listener<JSONArray>(){
@Override
public void onResponse(JSONArray response) {
}
@Override
public void onResponseHeaders(Map<String, String> headers) {
}
},new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("key","value");
return map;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("key","value");
return map;
}
};
記得最後要加入到隊列中,好了,網絡請求就說到這,後面我會分析網絡圖片的請求,如有問題,歡迎指正,謝謝。
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11