編輯:關於Android編程
不得不說,當不了解一件事情的時候,就會像當然的認為,其很神秘。但是當真正的接觸到了這些神秘的item,就不會有這種感覺了。作為一個android開發新手的我,剛接觸到了Volley這個開源的網絡請求框架,就瞬間被她打動了。下面我就談一談我對Volley的一些理解。
Volley是谷歌在2013年的I/O大會上發布的一個網絡請求的框架,Volley在性能方面進行了大幅度的調整,它的設計目標就是非常適合去進行數據量不大,但通信頻繁的網絡操作,而對於大數據量的網絡操作,比如說下載文件等,Volley的表現就會非常糟糕。其模型如圖所示。
說到了Volley的使用方法,我們就需要先了解一下這個框架的實現業務的流程了,如下:
然後就是了解一下API中相關的常用的幾個類及其用法了。
Volley:Volley 對外暴露的 API,通過 newRequestQueue(…) 函數新建並啟動一個請求隊列RequestQueue。 Request:表示一個請求的抽象類。StringRequest、JsonRequest、ImageRequest都是它的子類,表示某種類型的請求。 RequestQueue:表示請求隊列,裡面包含一個CacheDispatcher(用於處理走緩存請求的調度線程)、NetworkDispatcher數組(用於處理走網絡請求的調度線程),一個ResponseDelivery(返回結果分發接口),通過 start() 函數啟動時會啟動CacheDispatcher和NetwZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcmtEaXNwYXRjaGVyc6GjIDxicj4KQ2FjaGVEaXNwYXRjaGVyo7rSu7j2z9+zzKOs08PT2rX3tsi0psDt19+7urTmtcTH68fzoaPG9LavuvO74bK7ts+007u6tObH68fzttPB0NbQyKHH68fztKbA7aOsttPB0M6qv9XU8rXItP2jrMfrx/O0psDtveHK+NTyvau94bn7tKu13bj4UmVzcG9uc2VEZWxpdmVyecil1rTQ0Lrz0Pi0psDtoaO1sb3hufvOtLu6tOa5/aGiu7q05sqn0Ke78ru6tObQ6NKqy6LQwrXEx+m/9s/Co6y4w8frx/O2vNDo0qrW2NDCvfhOZXR3b3JrRGlzcGF0Y2hlcsiltfe2yLSmwO2howogTmV0d29ya0Rpc3BhdGNoZXKjutK7uPbP37PMo6zTw9Patfe2yLSmwO3X3834wue1xMfrx/Oho8b0tq+687vhsru2z7TTzfjC58frx/O208HQ1tDIocfrx/O0psDto6y208HQzqq/1dTytci0/aOsx+vH87SmwO294cr41PK9q73hufu0q7XduPhSZXNwb25zZURlbGl2ZXJ5yKXWtNDQuvPQ+LSmwO2jrLKixdC2z73hufvKx7fx0qq9+NDQu7q05qGjClJlc3BvbnNlRGVsaXZlcnmjure1u9i94bn7t9a3or3Tv9qjrMS/x7DWu9PQu/nT2kV4ZWN1dG9yRGVsaXZlcnm1xNTayOuyziBoYW5kbGVyILbU06bP37PMxNq9+NDQt9a3oqGjCkh0dHBTdGFja6O6tKbA7SBIdHRwIMfrx/OjrLe1u9jH68fzveG5+6GjxL/HsCBWb2xsZXkg1tDT0Lv509ogSHR0cFVSTENvbm5lY3Rpb24gtcRIdXJsU3RhY2u6zSC7+dPaIEFwYWNoZSBIdHRwQ2xpZW50ILXESHR0cENsaWVudFN0YWNroaMKTmV0d29ya6O6tffTw0h0dHBTdGFja7SmwO3H68fzo6yyor2rveG5+9equ7vOqr/JsbtSZXNwb25zZURlbGl2ZXJ5tKbA7bXETmV0d29ya1Jlc3BvbnNloaMgPGJyPgpDYWNoZaO6u7q05sfrx/O94bn7o6xWb2xsZXkgxKzIz8q508O1xMrHu/nT2iBzZGNhcmQgtcQKRGlza0Jhc2VkQ2FjaGWho05ldHdvcmtEaXNwYXRjaGVytcO1vcfrx/O94bn7uvPF0LbPyse38dDo0qq05rSi1NogQ2FjaGWjrENhY2hlRGlzcGF0Y2hlcrvhtNMgQ2FjaGUg1tDIobu6tOa94bn7oaMKCgo8cD66w8HLuMPWqrXAtcTO0sPH0rKy7rK7tuC2vNaqtcDBy6Osz8LD5r7NwLTSu7j20KHA/dfTyrW8yrXEzOXR6dK7sNGwyaGjPC9wPgoKPGg0IGlkPQ=="我的volley小例子">我的Volley小例子我要完成的是點擊一個按鈕,然後在下邊的兩個ImageView上顯示一張圖片。那麼,開始吧。
首先我們要做的就是在我們新建的工程的libs目錄下導入需要的Volley.jar包。然後並把其classpath導入。
然後就是設計布局,完善業務邏輯代碼。請看下面的詳細的解釋。
首先是布局文件:
然後是Java代碼:
package com.guoribiao.volleytest;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;
public class MainActivity extends Activity {
private Button mButton;
private ImageView mImageview;
private NetworkImageView networkImageView;
public void initView() {
mButton = (Button) findViewById(R.id.btn_getimage);
mImageview = (ImageView) findViewById(R.id.imageview);
networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void setImageTo(View view ){
setImage();
setImageByNetworkImageView();
}
/**
* 使用volley自帶的一個網絡圖片控件實現網絡圖片的加載
*/
private void setImageByNetworkImageView() {
//設置網絡請求的圖片的URL地址
String requestUrl = "https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1461212709&di=978a557d108c531a9f76f225454d0c5b&src=/uploadfile/2016/0422/20160422091643737.jpeg";
//創建一個請求隊列
RequestQueue queue = Volley.newRequestQueue(this);
//使用緩存機制緩存圖片
final LruCache lruCache = new LruCache(20);
//借助於上面的lrucache實現ImageCache的設置
ImageCache imageCache = new ImageCache(){
@Override
public Bitmap getBitmap(String url) {
lruCache.get(url);
return null;
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
lruCache.put(url, bitmap);
}
};
//創建一個圖片加載器
ImageLoader imageLoader = new ImageLoader(queue,imageCache);
//給控件設置標簽
networkImageView.setTag("url");
//設置將要顯示的圖片的URL和圖片加載器
networkImageView.setImageUrl(requestUrl, imageLoader);
}
/**
* 借助於Volley加載網絡上的一張圖片到一個ImageView控件上
*/
private void setImage() {
//將ImageView設置為可見的狀態
mImageview.setVisibility(1);
//設置一個請求隊列
RequestQueue queue = Volley.newRequestQueue(this);
//設置圖片所在的URL的地址
String imageUrl = "http://www.baidu.com/img/bd_logo1.png";
//設置一個lrucache
final LruCache< String , Bitmap > cache = new LruCache(20);
//生成一個圖片緩存器
ImageCache imageCache = new ImageCache(){
@Override
public Bitmap getBitmap(String url) {
cache.get(url);
return null;
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
};
//初始化一個圖片加載器
ImageLoader imageLoader = new ImageLoader(queue,imageCache);
//設置圖片加載過程中的一個偵聽,並添加到要進行顯示的控件上
ImageListener listener = ImageLoader.getImageListener(mImageview, R.drawable.ic_launcher, R.drawable.error);
//設置加載的URL地址和監聽器
imageLoader.get(imageUrl, listener);
}
}
最後,別忘了在manifest.xml清單文件中聲明一下網絡權限。
最後來看一下測試的結果吧。
而且,當我們剛點擊按鈕的時候會發現,上面的那個ImageView控件會顯示一個默認的ic_launcher圖標.這是因為它剛剛正在加載。加載完成後,就會顯示正常的網絡圖片了。
使用Volley的話,適合於那些小流量,請求次數頻繁的網絡請求,不適合於大數據的下載,所以我們需要按照自己的需求來選擇使用。
改進的方向:
別人的,雖然好用,但是不是最適合自己的。我們可以在Volley的基礎上,創建自己的網絡請求資源代碼庫,比如說將特殊需求的網絡請求進行二次封裝,這樣可以省去很多時間編寫重復性的代碼。還能有效的處理。何樂而不為呢。
大家都發過微信小視頻到朋友圈,有時候,想看看以前自己發的小視頻,但是發現朋友圈的動態已經刪除了,那麼這樣怎麼去找回微信小視頻呢?微信小視頻保存在哪裡呢?下面
介紹RecyclerView是support-v7包中的新組件,是一個強大的滑動組件,與經典的ListView相比,同樣擁有item回收復用的功能,但是直接把viewho
android的selector對於android開發者而言再熟悉不過了,只要定義一個drawable目錄下定義一個selector的xml文件,在布局文件中backgr
先看下運行效果: 程序結構:MainActivity文件中代碼:復制代碼 代碼如下:package com.android.buttonpagefl