Volley網路請求架構
首先我們要先來解釋一下Volley這個東西是什麼?它要具體幹什麼?它的優勢及劣勢是什麼?我們一點點來吧。。。
我們先來說一下這個是什麼?根據官方說明:它是2013年Google I/O上釋出的一款網絡架構 基于Android 平台,能夠使網絡通信更快更簡單更健全等等
說白了就是一個請求網路資料的架構
那它的優勢是什麼呢?(1) 網絡請求的排序;(2)網絡請求的優先級處理;(3)緩存;(4)多級别取消請求;(5)最重要的是非常适合去進行資料量不大;但通信頻繁的網絡操作;(6)可以自定義拓展等等
那它的劣勢:對于大資料量的網絡操作,比如說下載下傳檔案等 它的表現就不是很好
下面我們來具體講解一下的步驟吧:
導入jar包
添加網絡權限
1 網路請求它分為三種 (1) get 請求;(2)post請求;(3)請求Json資料
2 get請求操作:
具體操作如下所示:
// 定義一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(GETActivity.this);
// 定義一個請求(參數:位址;正确監聽,錯誤監聽)
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Log.i("===s",s );
// 将資料進行解析
List<JsonBean.ResultBean.DataBean> dataList = initGson(s);
// 設定擴充卡
initAdapter(dataList);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.i("---erro--",volleyError.toString());
}
});
// 将建立的請求添加請求隊列中
requestQueue.add(stringRequest);
接下來就是POST請求:
// 建立請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(POSTActivity.this);
// 建立請求(參數:第一:請求方式 第二 接口位址 第三 成功請求 第四 錯誤請求)
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
// 進行gson 解析資料
List<JsonBean.ResultBean.DataBean> datas = initGson(s);
// 進行擴充卡
initAdapter(datas);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(POSTActivity.this, "錯誤請求", Toast.LENGTH_SHORT).show();
}
});
// 将請求添加到隊列中
requestQueue.add(stringRequest);
}
接下來的是請求Json資料
// 建立請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(JSONActivity.this);
/**
* 首先 判斷資料 是什麼類型的
* 1 對象 還是 數組
* 2 對象:jsonObjectRequest 數組:jsonObjectRequest
* 3 根據解析的資料 進行适配
*/
// 建立請求json(參數:第一 接口位址 第二 一般為null 第三 成功的請求 第四 錯誤的請求)
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
String s = jsonObject.toString();
// 進行json解析資料
List<JsonBean.ResultBean.DataBean> datas = initGson(s);
// 進行設定擴充卡
initAdapter(datas);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(JSONActivity.this, "錯誤請求。。。", Toast.LENGTH_SHORT).show();
}
});
// 将請求添加到隊列中
requestQueue.add(jsonObjectRequest);
切記 不要忘記将請求加到隊列中否則不顯示資料
imageRequest請求圖檔(注意是Volley包下的)
// 建立一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(context);
// 建立一個請求
ImageRequest imageRequest = new ImageRequest(list.get(position).getUrl(), new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
hoder.imageView.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.ALPHA_8, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
hoder.imageView.setImageResource(R.mipmap.ic_launcher);
}
});
// 将請求添加進去圖檔請求
requestQueue.add(imageRequest);
ImageLoder請求網絡圖檔
// 建立一個請求隊列
RequestQueue requestQueue = Volley.newRequestQueue(context);
// 建立一個ImageLoder(volley包下的)(擁有兩個參數{一個是請求隊列,一個是是否緩存機制})
ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
@Override
public Bitmap getBitmap(String s) {
return null;
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
}
});
// 加載圖檔(參數:1 控件 2 預設圖檔 3 錯誤圖檔)
imageLoader.get(url,imageLoader.getImageListener(imageView,R.mipmap.ic_launcher,R.mipmap.ic_launcher));