Android Volley Library
This post hasn't been updated for 9 years
What is Volley?
Tại Google I/o 2013 Google đã giới thiệu với toàn thế giới về thư viện mạng Volley trong phát triển ứng dụng Android. Các bạn cũng đã hình dung được Volley là gì ? Tóm tắt lại , Volley là một Networking Library để quản lý các request Network và lưu trữ những response không cần các Developer viết nhiều code như trước . Các tools bên trong Volley cho phép cùng một lúc thưc hiện nhiều request trên các thread khác nhau với các mức độ ưu tiên (priority ) khác nhau. Tất cả request được thực hiện và lưu trữ trong bộ nhớ cache giúp co việc reload lại dữ nhiều nhanh hơn. Toàn bộ response được lưu trong memory vậy nên nó không phải là 1 ý tưởng hay cho việc tải về những dữ liệu lớn như music hay movies. Nhưng nó lại là tuyệt với với những loại dữ liệu như JSON, Image, String ...
The Sample Application
Trong sample Application bao gồm các cách sử dụng các tools của thư viện Volley. Application có 3 button, mỗi button sẽ là 1 loại request khác nhau, sử dụng những tools trong thư viện để lấy về những loại dữ liệu khác nhau. Các bạn có thể download sample tại đậy.
Forming a Request
Với Volley việc giao tiếp với Network được quản lý bởi RequestQueue. Cách tốt nhất để sử dụng RequestQueue và tất cả các tools của nó, đặc biệt là cache là tạo duy nhất một RequestQueue và giữ nó như một Singleton. Tại mỗi thời điểm bạn có thể add hoặc cancel những reqeust , thậm chí stop or start request và truy cập vào cache.
RequestQueue queue = Volley.newRequestQueue(this);
Những Request Class trong Volley là StringRequest , JsonObjectRequest,JsonArrayRequest, ImageLoader. Hầu hết những Request trong Volley đều sử dụng Constructor giống như bên dưới. Các tham số trong Constructor:
-
RequestMethod: GET, POST, DELETE...
-
**JSONObject **: Một Object tuỳ chọn sẽ được gửi cùng request của bạn.
-
ResponseListener : Nơi bạn nhận dữ liệu trả về từ server khi request hoàn thành.
-
**ErrorListener **: Nơi bạn nhận lại những problem bên trong request của bạn từ server. JsonObjectRequest request JsonObjectRequest(Requestmethod, url, null, newResponseListener(), new ErrorListener());
Response and Error Listeners
Trước khí request của bạn được thực hiện, Bạn cần tạo các response and error class để thực hiện các listener vào trong những request của bạn. Nhưng Lisener này sẽ thông báo những thứ khi request của bạn hoàn thành hoặc trong những sự kiện lỗi sảy ra.
Successful Response Listener
private class ResponseListener implements Response.Listener{
@Override
public void onResponse(JSONObject response){
}
}
Error Response Listener
private class ErrorListener implements Response.ErrorListener{
@Override
public void onErrorResponse(VolleyError error){
}
}
Making the Call
Bây giờ khi bạn đã tạo một** Request** và một lớp Response . Bạn nên add Request tới RequestQueue và lấy dữ liệu về. Để làm vậy, đơn giản bạn chỉ cần add reqeust tới RequestQueue. queue.add(request); Response và error sẽ được phân chia tới response/error class mà bạn định nghĩa trong request của bạn. Bạn có thể add nhiều request tới RequestQueue tại một thời điểm.
Request Prioritization
Nếu bạn chọn add nhiều Request tới RequestQueue tại một thời điểm, bạn cũng có thể xét độ ưu tiên cho mỗi request để bạn có thể nhận được các thông tin quan trọng trước. Thật không may Volley không có phương thức setPriority(). Tuy nhiên bạn có thể Custome mở rộng request class và override hai phương thức getPriority() và setPriority() như ví dụ bên dưới:
public class CustomStringRequest extends StringRequest {
private Priority priority = Priority.LOW;
CustomStringRequest(String url, Listener<string>listener,ErrorListener errorListener){
super(url, listener, errorListener);
}
@Override
public Priority getPriority(){
return priority;
}
@Override
public void setPriority(Priority priority){
this.priority= priority;
}
}
Lớp trên mạc định Priority là LOW . Tuy nhiên trong Activity bạn có thể xét lại nó như bên dưới:
Request.setPriority(Priority.IMMEDIATE);
Utilizing the Response Cache
Cache là thực hiện tự động trong các request như RequestJSon hoặc các request khác mở rộng từ Volley Request class . Tuy nhiên bạn có thể tắt cache bằng dòng lệnh như bên dưới trước khi bạn add request tới RequestQueue :
request.setShouldCache(false);
Accessing the cache
Sau khi request được hoàn thành và dữ liệu được lấy về . Bạn có thể truy cập vào cache bởi 1 trong 2 cách :
request.getCacheEntry().data
hoặc
queue.getCache().get(url).data
Phương thức trên truy cập Cache thông qua **RequestQueue **
Volley Cache Tools
Volly Cache Tool cho phép bạn xoá một Cache của một Response , toàn bộ Cache , đánh dấu Cache của một Response không hợp lệ , lấy dữ liệu của Cache của một Response trước khi bạn update lại. Xoá Cache của một Request nhất định :
queue.getCache().remove(url);
Ngoại ra Volley còn cung cấp cho bạn dòng lệnh để bạn có thể xoá toàn bộ Cache của tất cả các Request :
queue.getCache().clear();
Đánh dấu Cache của một resonse không hợp lệ:
queue.getCache().invalidate(url, true);
Cuối cùng bạn cũng có thể nhận được ngày của một response trả về. Điều này là tốt để đảm bảo rằng dữ liệu liệu người dùng không phải quá cũ:
queue.getCache().get(url).serverDate
Ngoài ra bạn có thể kết hợp như bên dưới:
if(queue.getCache().get(url)!=null){
//response exists
String cachedResponse = new String(queue.getCache().get(url).data);
results.setText("From Cache: " + cachedResponse);
}else{
//no response
queue.add(stringRequest);
}
Tài liệu tham khảo:http://www.captechconsulting.com/blog/clinton-teegarden/android-volley-library-tutorial
All Rights Reserved