11/08/2018, 21:48

Android Volley Library

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 ...

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 VolleyStringRequest , 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);
}

0