android volley框架
2017 官方版- 軟件大?。?span itemprop="fileSize">302 KB
- 更新日期:2017-03-18
- 軟件語(yǔ)言:簡(jiǎn)體中文
- 軟件類別:其它應(yīng)用
- 軟件授權(quán):免費(fèi)軟件
- 軟件官網(wǎng):未知
- 適用平臺(tái):WinXP, Win7, Win8, Win10, WinAll
- 軟件廠商:
軟件介紹人氣軟件相關(guān)文章網(wǎng)友評(píng)論下載地址
android volley是款這進(jìn)行android開(kāi)發(fā)的時(shí)候,必須要進(jìn)行使用的或者是不可或缺的重要框架;如果您想要進(jìn)行快速的開(kāi)發(fā)或者方便快捷的使用,就需要使用這款android volley框架了,這款軟件的操作非常的簡(jiǎn)單,使用方便,是款非常值得信賴的軟件,需要的朋友趕快將軟件android volley框架下載來(lái)進(jìn)行使用試試吧,相信您一定不會(huì)后悔的!
軟件功能
自動(dòng)調(diào)度網(wǎng)絡(luò)請(qǐng)求;
高并發(fā)網(wǎng)絡(luò)連接;
通過(guò)標(biāo)準(zhǔn)的 HTTP cache coherence(高速緩存一致性)緩存磁盤(pán)和內(nèi)存透明的響應(yīng);
支持指定請(qǐng)求的優(yōu)先級(jí);
網(wǎng)絡(luò)請(qǐng)求cancel機(jī)制。我們可以取消單個(gè)請(qǐng)求,或者指定取消請(qǐng)求隊(duì)列中的一個(gè)區(qū)域;
框架容易被定制,例如,定制重試或者回退功能;
包含了調(diào)試與追蹤工具;
Volley 不適合用來(lái)下載大的數(shù)據(jù)文件。因?yàn)?Volley 會(huì)保持在解析的過(guò)程中所有的響應(yīng)。對(duì)于下載大量的數(shù)據(jù)操作,請(qǐng)考慮使用 DownloadManager。
軟件特色
Volley:Volley 對(duì)外暴露的 API,通過(guò) newRequestQueue(…) 函數(shù)新建并啟動(dòng)一個(gè)請(qǐng)求隊(duì)列RequestQueue。
Request:表示一個(gè)請(qǐng)求的抽象類。StringRequest、JsonRequest、ImageRequest都是它的子類,表示某種類型的請(qǐng)求。
RequestQueue:表示請(qǐng)求隊(duì)列,里面包含一個(gè)CacheDispatcher(用于處理走緩存請(qǐng)求的調(diào)度線程)、NetworkDispatcher數(shù)組(用于處理走網(wǎng)絡(luò)請(qǐng)求的調(diào)度線程),一個(gè)ResponseDelivery(返回結(jié)果分發(fā)接口),通過(guò) start() 函數(shù)啟動(dòng)時(shí)會(huì)啟動(dòng)CacheDispatcher和NetworkDispatchers。
CacheDispatcher:一個(gè)線程,用于調(diào)度處理走緩存的請(qǐng)求。啟動(dòng)后會(huì)不斷從緩存請(qǐng)求隊(duì)列中取請(qǐng)求處理,隊(duì)列為空則等待,請(qǐng)求處理結(jié)束則將結(jié)果傳遞給ResponseDelivery去執(zhí)行后續(xù)處理。當(dāng)結(jié)果未緩存過(guò)、緩存失效或緩存需要刷新的情況下,該請(qǐng)求都需要重新進(jìn)入NetworkDispatcher去調(diào)度處理。
NetworkDispatcher:一個(gè)線程,用于調(diào)度處理走網(wǎng)絡(luò)的請(qǐng)求。啟動(dòng)后會(huì)不斷從網(wǎng)絡(luò)請(qǐng)求隊(duì)列中取請(qǐng)求處理,隊(duì)列為空則等待,請(qǐng)求處理結(jié)束則將結(jié)果傳遞給ResponseDelivery去執(zhí)行后續(xù)處理,并判斷結(jié)果是否要進(jìn)行緩存。
ResponseDelivery:返回結(jié)果分發(fā)接口,目前只有基于ExecutorDelivery的在入?yún)?handler 對(duì)應(yīng)線程內(nèi)進(jìn)行分發(fā)。
HttpStack:處理 Http 請(qǐng)求,返回請(qǐng)求結(jié)果。目前 Volley 中有基于 HttpURLConnection 的HurlStack和 基于 Apache HttpClient 的HttpClientStack。
Network:調(diào)用HttpStack處理請(qǐng)求,并將結(jié)果轉(zhuǎn)換為可被ResponseDelivery處理的NetworkResponse。
Cache:緩存請(qǐng)求結(jié)果,Volley 默認(rèn)使用的是基于 sdcard 的DiskBasedCache。NetworkDispatcher得到請(qǐng)求結(jié)果后判斷是否需要存儲(chǔ)在 Cache,CacheDispatcher會(huì)從 Cache 中取緩存結(jié)果。
使用說(shuō)明
Volley工作原理圖如下:
使用Volley框架實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求主要有以下三個(gè)步驟:
1.創(chuàng)建RequestQueue對(duì)象,定義網(wǎng)絡(luò)請(qǐng)求隊(duì)列;
2.創(chuàng)建XXXRequest對(duì)象(XXX代表String,JSON,Image等等),定義網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求的詳細(xì)過(guò)程;
3.把XXXRequest對(duì)象添加到RequestQueue中,開(kāi)始執(zhí)行網(wǎng)絡(luò)請(qǐng)求。
3.1 創(chuàng)建RequestQueue對(duì)象
一般而言,網(wǎng)絡(luò)請(qǐng)求隊(duì)列都是整個(gè)APP內(nèi)使用的全局性對(duì)象,因此最好寫(xiě)入Application類中:
>public class MyApplication extends Application{
// 建立請(qǐng)求隊(duì)列
public static RequestQueue queue;
@Override
public void onCreate() {
super.onCreate();
queue = Volley.newRequestQueue(getApplicationContext());
}
public static RequestQueue getHttpQueue() {
return queue;
}
}
這是,我們還需要修改AndroidManifest.xml文件,使APP的Application對(duì)象為我們剛定義的MyApplication,并添加INTERNET權(quán)限:
>
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
3.2 創(chuàng)建XXXRequest對(duì)象并添加到請(qǐng)求隊(duì)列中
Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式:
JsonObjectRequest:返回JSONObject對(duì)象;
JsonArrayRequest:返回JsonArray對(duì)象;
StringRequest:返回String。
另外可以繼承Request自定義Request。
>public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// GET請(qǐng)求
VolleyGet();
// POST請(qǐng)求
VolleyPost();
}
// 定義POST請(qǐng)求的方法
private void VolleyPost() {
// 請(qǐng)求地址
String url = "http://ce.sysu.edu.cn/hope/";
// 創(chuàng)建StringRequest,定義字符串請(qǐng)求的請(qǐng)求方式為POST,
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener() {
// 請(qǐng)求成功后執(zhí)行的函數(shù)
@Override
public void onResponse(String s) {
// 打印出POST請(qǐng)求返回的字符串
Toast.makeText(MainActivity.this, "POST: " + s, Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
// 請(qǐng)求失敗時(shí)執(zhí)行的函數(shù)
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}){
// 定義請(qǐng)求數(shù)據(jù)
@Override
protected Map getParams() throws AuthFailureError {
Map hashMap = new HashMap();
hashMap.put("phone", "11111");
return hashMap;
}
};
// 設(shè)置該請(qǐng)求的標(biāo)簽
request.setTag("abcPost");
// 將請(qǐng)求添加到隊(duì)列中
MyApplication.getHttpQueue().add(request);
}
// 定義GET請(qǐng)求的方法
private void VolleyGet() {
// 定義請(qǐng)求地址
String url = "http://ce.sysu.edu.cn/hope/";
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener() {
@Override
public void onResponse(String s) {
// 打印出GET請(qǐng)求返回的字符串
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
// 設(shè)置該請(qǐng)求的標(biāo)簽
request.setTag("abcGet");
// 將請(qǐng)求添加到隊(duì)列中
MyApplication.getHttpQueue().add(request);
}
}
輸出:
>// POST請(qǐng)求
POST: <厚樸網(wǎng)站首頁(yè)源代碼。。。>
// GET請(qǐng)求
GET: <厚樸網(wǎng)站首頁(yè)源代碼。。。>
3.3 關(guān)閉請(qǐng)求
3.3.1 關(guān)閉特定標(biāo)簽的網(wǎng)絡(luò)請(qǐng)求:
>// 網(wǎng)絡(luò)請(qǐng)求標(biāo)簽為"abcGet"
public void onStop() {
super.onStop();
MyApplication.getHttpQueues.cancelAll("abcGet");
}
3.3.2 取消這個(gè)隊(duì)列里的所有請(qǐng)求:
在activity的onStop()方法里面,取消所有的包含這個(gè)tag的請(qǐng)求任務(wù)。
>@Override
protected void onStop() {
super.onStop();
mRequestQueue.cancelAll(this);
}
四. GET和POST請(qǐng)求工具庫(kù)的封裝
4.1 重寫(xiě)Application
因?yàn)榫W(wǎng)絡(luò)請(qǐng)求隊(duì)列相對(duì)于APP應(yīng)用老說(shuō)是全局對(duì)象,因此可以定義在全局中。為此,我們新建一個(gè)LIMSApplication,并讓其繼承自Application。
LIMSApplication.java文件:
>public class LIMSApplication extends Application {
public static RequestQueue volleyQueue;
@Override
public void onCreate() {
super.onCreate();
/* Volley配置 */
// 建立Volley的Http請(qǐng)求隊(duì)列
volleyQueue = Volley.newRequestQueue(getApplicationContext());
}
// 開(kāi)放Volley的HTTP請(qǐng)求隊(duì)列接口
public static RequestQueue getRequestQueue() {
return volleyQueue;
}
}
不要忘記在AndroidManifest.xml文件中修改Application的name和相應(yīng)的網(wǎng)絡(luò)請(qǐng)求權(quán)限:
>
android:name=".LIMSApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
4.2 GET和POST請(qǐng)求的封裝:
目前,VolleyRequestUtil工具庫(kù)只包含了兩個(gè)函數(shù),分別獲取GET和POST請(qǐng)求。
VolleyRequestUtil.java:
>public class VolleyRequestUtil {
public static StringRequest stringRequest;
public static Context context;
/*
* 獲取GET請(qǐng)求內(nèi)容
* 參數(shù):
* context:當(dāng)前上下文;
* url:請(qǐng)求的url地址;
* tag:當(dāng)前請(qǐng)求的標(biāo)簽;
* volleyListenerInterface:VolleyListenerInterface接口;
* */
public static void RequestGet(Context context, String url, String tag, VolleyListenerInterface volleyListenerInterface) {
// 清除請(qǐng)求隊(duì)列中的tag標(biāo)記請(qǐng)求
LIMSApplication.getRequestQueue().cancelAll(tag);
// 創(chuàng)建當(dāng)前的請(qǐng)求,獲取字符串內(nèi)容
stringRequest = new StringRequest(Request.Method.GET, url, volleyListenerInterface.responseListener(), volleyListenerInterface.errorListener());
// 為當(dāng)前請(qǐng)求添加標(biāo)記
stringRequest.setTag(tag);
// 將當(dāng)前請(qǐng)求添加到請(qǐng)求隊(duì)列中
LIMSApplication.getRequestQueue().add(stringRequest);
// 重啟當(dāng)前請(qǐng)求隊(duì)列
LIMSApplication.getRequestQueue().start();
}
/*
* 獲取POST請(qǐng)求內(nèi)容(請(qǐng)求的代碼為Map)
* 參數(shù):
* context:當(dāng)前上下文;
* url:請(qǐng)求的url地址;
* tag:當(dāng)前請(qǐng)求的標(biāo)簽;
* params:POST請(qǐng)求內(nèi)容;
* volleyListenerInterface:VolleyListenerInterface接口;
* */
public static void RequestPost(Context context, String url, String tag, final Map params, VolleyListenerInterface volleyListenerInterface) {
// 清除請(qǐng)求隊(duì)列中的tag標(biāo)記請(qǐng)求
LIMSApplication.getRequestQueue().cancelAll(tag);
// 創(chuàng)建當(dāng)前的POST請(qǐng)求,并將請(qǐng)求內(nèi)容寫(xiě)入Map中
stringRequest = new StringRequest(Request.Method.POST, url, volleyListenerInterface.responseListener(), volleyListenerInterface.errorListener()){
@Override
protected Map getParams() throws AuthFailureError {
return params;
}
};
// 為當(dāng)前請(qǐng)求添加標(biāo)記
stringRequest.setTag(tag);
// 將當(dāng)前請(qǐng)求添加到請(qǐng)求隊(duì)列中
LIMSApplication.getRequestQueue().add(stringRequest);
// 重啟當(dāng)前請(qǐng)求隊(duì)列
LIMSApplication.getRequestQueue().start();
}
}
4.3 Volley請(qǐng)求(成功或失?。┑谋O(jiān)聽(tīng)事件封裝:
封裝Volley請(qǐng)求(成功或失?。┑谋O(jiān)聽(tīng)事件,見(jiàn)VolleyListenerInterface.java:
>public abstract class VolleyListenerInterface {
public Context mContext;
public static Response.Listener mListener;
public static Response.ErrorListener mErrorListener;
public VolleyListenerInterface(Context context, Response.Listener listener, Response.ErrorListener errorListener) {
this.mContext = context;
this.mErrorListener = errorListener;
this.mListener = listener;
}
// 請(qǐng)求成功時(shí)的回調(diào)函數(shù)
public abstract void onMySuccess(String result);
// 請(qǐng)求失敗時(shí)的回調(diào)函數(shù)
public abstract void onMyError(VolleyError error);
// 創(chuàng)建請(qǐng)求的事件監(jiān)聽(tīng)
public Response.Listener responseListener() {
mListener = new Response.Listener() {
@Override
public void onResponse(String s) {
onMySuccess(s);
}
};
return mListener;
}
// 創(chuàng)建請(qǐng)求失敗的事件監(jiān)聽(tīng)
public Response.ErrorListener errorListener() {
mErrorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
onMyError(volleyError);
}
};
return mErrorListener;
}
}
4.3 Volley圖片加載庫(kù)的封裝:
Volley庫(kù)還具有圖片加載的功能。但適合小圖片的異步加載,不適合于比較大的圖片資源的請(qǐng)求。
Volley提供了多種Request方法,譬如ImageRequest、ImageLoader、NetWorkImageView。
網(wǎng)絡(luò)圖片資源的請(qǐng)求封裝如下:
ImageLoaderUtil.java:
>public class ImageLoaderUtil {
/*
* 通過(guò)ImageRequest來(lái)顯示網(wǎng)絡(luò)圖片
* */
public static void setImageRequest(String url, final ImageView imageView) {
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener() {
@Override
public void onResponse(Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
imageView.setBackgroundResource(R.mipmap.ic_launcher);
}
});
LIMSApplication.getRequestQueue().add(imageRequest);
}
/*
* 通過(guò)ImageLoader來(lái)顯示網(wǎng)絡(luò)圖片
* */
public static void setImageLoader(String url, ImageView imageView, int defaultImageResId, int errorImageResId) {
ImageLoader loader = new ImageLoader(LIMSApplication.getRequestQueue(), new BitmapCache());
ImageLoader.ImageListener imageListener = ImageLoader.getImageListener(imageView, defaultImageResId, errorImageResId);
loader.get(url, imageListener);
}
/*
* 通過(guò)Volley的NetWorkImageView來(lái)顯示網(wǎng)絡(luò)圖片
* */
public static void setNetWorkImageView(String url, NetworkImageView netWorkImageView, int defaultImageResId, int errorImageResId) {
ImageLoader loader = new ImageLoader(LIMSApplication.getRequestQueue(), new BitmapCache());
netWorkImageView.setDefaultImageResId(defaultImageResId);
netWorkImageView.setErrorImageResId(errorImageResId);
netWorkImageView.setImageUrl(url, loader);
}
}
五. VolleyRequestUtil與ImageLoaderUtil的使用
5.1 用GET方式請(qǐng)求網(wǎng)絡(luò)資源:
>new VolleyRequestUtil().RequestGet(this, "http://ce.sysu.edu.cn/hope/", "hopePage",
new VolleyListenerInterface(this, VolleyListenerInterface.mListener, VolleyListenerInterface.mErrorListener) {
// Volley請(qǐng)求成功時(shí)調(diào)用的函數(shù)
@Override
public void onMySuccess(String result) {
Toast.makeText(this, s, Toast.LENGTH_LONG).show();
}
// Volley請(qǐng)求失敗時(shí)調(diào)用的函數(shù)
@Override
public void onMyError(VolleyError error) {
// ...
}
});
輸出:厚樸網(wǎng)站首頁(yè)的源代碼。
5.2 用POST方式請(qǐng)求網(wǎng)絡(luò)資源:
>new VolleyRequestUtil().RequestPOST(this, "http://ce.sysu.edu.cn/hope/", "hopePage",
new VolleyListenerInterface(this, VolleyListenerInterface.mListener, VolleyListenerInterface.mErrorListener) {
// Volley請(qǐng)求成功時(shí)調(diào)用的函數(shù)
@Override
public void onMySuccess(String result) {
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
// Volley請(qǐng)求失敗時(shí)調(diào)用的函數(shù)
@Override
public void onMyError(VolleyError error) {
// ...
}
});
輸出:厚樸網(wǎng)站首頁(yè)的源代碼。
5.3 通過(guò)ImageRequest來(lái)顯示網(wǎng)絡(luò)圖片:
>// 參數(shù)分別為:請(qǐng)求圖片的地址、圖片的容器ImageView
ImageView imgView = (ImageView) findViewById(R.id.imgView);
new ImageLoaderUtil().setImageRequest("http://7xinb0.com1.z0.glb.clouddn.com/skin/HopeRebuild/dist/images/logo/logo_40.png", imgView);
在布局文件中,定義ImageView:
>
android:id="@+id/imgView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
5.4 通過(guò)ImageLoader來(lái)顯示網(wǎng)絡(luò)圖片:
>// 參數(shù)分別為:請(qǐng)求圖片的地址、圖片的容器ImageView、默認(rèn)顯示的圖片ResourceID、請(qǐng)求失敗時(shí)顯示的圖片的ResourceID
new ImageLoaderUtil().setImageLoader("http://7xinb0.com1.z0.glb.clouddn.com/skin/HopeRebuild/dist/images/logo/logo_40.png", imgView, R.mipmap.default, R.mipmap.error);
在布局文件中,定義ImageView:
>
android:id="@+id/imgView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
5.5 通過(guò)Volley的NetWorkImageView來(lái)顯示網(wǎng)絡(luò)圖片:
>// 參數(shù)分別為:請(qǐng)求圖片的地址、圖片的容器NetworkImageView、默認(rèn)顯示的圖片ResourceID、請(qǐng)求失敗時(shí)顯示的圖片的ResourceID
NetworkImageView netWorkImageView = (NetworkImageView) findViewById(R.id.imgNetworkView);
new ImageLoaderUtil().setNetWorkImageView("http://7xinb0.com1.z0.glb.clouddn.com/skin/HopeRebuild/dist/images/logo/logo_40.png", netWorkImageView, R.mipmap.default, R.mipmap.error);
在布局文件中,定義NetworkImageView:
>
android:id="@+id/imgNetworkView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_centerHorizontal="true"/>
下載地址
-
android volley框架 2017 官方版
人氣軟件
Adobe Acrobat Pro DC 永久激活版下載548 MB
/簡(jiǎn)體中文X-Force KeyGen注冊(cè)機(jī)合集(32+64位)658 KB
/英文autocad2017注冊(cè)機(jī) 支持32位/64位676 KB
/簡(jiǎn)體中文KYTool插件下載(凱元工具)30.54 MB
/簡(jiǎn)體中文云南師范大學(xué)上網(wǎng)認(rèn)證客戶端44.8 MB
/簡(jiǎn)體中文草圖大師通用注冊(cè)機(jī)(sketchup2016激活碼獲取)894 KB
/簡(jiǎn)體中文Stata 16(統(tǒng)計(jì)學(xué)軟件)356 MB
/簡(jiǎn)體中文refprop(制冷劑物性查詢運(yùn)算軟件)附中文教程6.5 MB
/簡(jiǎn)體中文hpds2011下載(城鎮(zhèn)道路路面設(shè)計(jì))1.3 MB
/簡(jiǎn)體中文中控zktime考勤軟件系統(tǒng)38.7 MB
/簡(jiǎn)體中文
相關(guān)文章
查看所有評(píng)論>>網(wǎng)友評(píng)論共0條
精彩評(píng)論
- 最新評(píng)論