Volley
یک networking library (کتابخانه ای برای ارتباط با شبکه ) در اندروید می باشد. استفاده از این کتابخانه که توسط گوگل توسعه یافته است کار را برای برنامه نویسان اندروید بسیار راحت می کند(اتصال اندروید به Rest بوسیله volley).
با استفاده از آن دیگر خبری از HttpClient و امثال آن برای ارتباط با سرور و گرفتن اطلاعات نیست، دیگری نیازی نیست اطلاعات دریافت شده از سرور را به فرمت قابل استفاده یا همان String تبدیل کرد .
استفاده از Volley علاوه بر اینکه راحتر می باشد، سرعیتر از روش های قبلی و معمول است.
برخی از ویژگی های Volley از این قبیل می باشند :
ایجاد صف درخواست (Request Queuing)
داشتن کنترل روی حافظه و بافرینگ (Cache)
توانایی لغو درخواست ها در صف (Cancelling Request)
برای استفاده از این کتابخانه بایستی در ابتدا فایل .jar مرتبط با آن را در پوشه libs پروژه خود وارد کنید و آن را به برنامه معرفی کنید (فایل کتابخانه در انتهای آموزش قرار داده می شود. همچنین، IDE پیش فرض ما اندروید استودیو است).
برای معرفی فایل های .jar به پروژه، وارد build.gradle مربوط به app شوید و در قسمت dependencies، کد زیر را وارد کنید و سپس پروژه را sync نمایید:
compile files (‘libs/volley.jar’)
در مرحله بعد ما به یک Package دیگر نیازی داریم. یک Package با نام utils ایجاد کرده و سپس داخل آن کلاس LruBitmapCache را تعریف می کنیم.
همانطور که در بالا گفتیم یکی از قابلیت های این کتابخانه Caching می باشد، این کلاس در واقع توابع مورد نیاز برای استفاده از این قابلیت را برای ما فراهم می کند.
public class LruBitmapCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public LruBitmapCache() {
this(getDefaultLruCacheSize());
}
public LruBitmapCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
@Override
public Bitmap getBitmap(String s) {
return null;
}
@Override
public void putBitmap(String s, Bitmap bitmap) {
}
}
پس از اضافه کردن این کلاس، کار ما با این Package به اتمام می رسد.
کدهای زیر را به کلاس G خود اضافه می کنیم. توابع این کلاس در ایجاد صف درخواست، اضافه کردن درخواست به صف، دسترسی به درخواست های قرار گرفته در صف، کنسل کردن درخواست های موجود در صف و از این قبیل موارد می باشد (کد زیر، کد کلاس G به طور کامل است. کدهای مشترک را پاک کنید).
public class G extends Application {
public static final String TAG = G.class.getSimpleName();
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static G mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized G getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public ImageLoader getImageLoader() {
getRequestQueue();
if (mImageLoader == null) {
mImageLoader = new ImageLoader(this.mRequestQueue, new LruBitmapCache());
}
return this.mImageLoader;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
// set the default tag if tag is empty
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
حالا سراغ ایجاد درخواست و گرفتن اطلاعات از سرور می رویم. در این مثال قرار است ما درخواست JsonArray به سرور داشته باشیم و اطلاعات مورد نظر را دریافت کنیم. حال در MainActivity به ترتیب کدهای زیر را وارد می کنیم.
/**
* Tag Used To Cancel The Request
*/
String tag_json_array = “tag_json_array”;
همانطور که گفته شد ما توانایی Cancel کردن درخواست هایمان را داریم. این یک متغییر از نوع متن می باشد که با استفاده از آن می توانیم درخواست را Cancel کرده و از انجام آن صرف نظر کنیم.
در ادامه توضیحات تکمیلی آورده می شود.