[Android Cơ Bản] Retrofit và Flickr API – P3

Link phần trước : http://www.dotplays.com/android-co-ban-gioi-thieu-flickr-va-flickr-api-p2/

Lời mở đầu : Trong bài viết này, thầy hướng dẫn các em tạo 1 dự án và bắt đầu chạy thử Flickr API sử dụng thư viện HTTP Request là Retrofit nhé .

Trong ví dụ này, thầy sử dụng FLICKR API lấy danh sách ảnh yêu thích (favorite) nhé

Trong bài sẽ có các bước thực hiện sau :

  1. Thêm dữ liệu mẫu cho mục ảnh yêu thích
  2. Tạo dự án và thêm thư viện Retrofit
  3. Viết câu lệnh tạo request để danh sách ảnh
  4. Chức năng phân trang của Flickr API

Bước 1 : Thêm dữ liệu mẫu cho mục ảnh yêu thích

Đăng nhập tài khoản Flickr và tìm kiếm các ảnh bất kì, nhấn icon hình ngôi sao ở góc dưới bên phải của ảnh, để thêm là ảnh yêu thích, trong ví dụ này chúng ta cần khoảng trên 30 ảnh yêu thích nhé.

Kết quả :

Bước 2 : Tạo dự án và thêm thư viện Retrofit

Thêm thư viện vào file build.gradle ( Module:app ) . Phiên bản mới nhất khi thầy viết bài này là 2.6.2

implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'

Tại interface FlickrService để khởi tạo các request với Retrofit

Tạo class MyRetrofitBuilder để khởi tạo thư viên Retrofit mỗi khi sử dụng , BASE_URL = “https://www.flickr.com/

public static FlickrService service;
public static FlickrService getInstance() {

    if (service == null) {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        service = retrofit.create(FlickrService.class);
    }
    return service;
}

Khởi tạo phương thức request danh sách ảnh yêu thích trong interface FlickrService như sau :

@GET("services/rest/")
Call<FPhoto> getListFavo(@Query("extras") String extras,
                         @Query("nojsoncallback") String nojsoncallback,
                         @Query("user_id") String user_id,
                         @Query("format") String format,
                         @Query("api_key") String api_key,
                         @Query("method") String method,
                         @Query("page") int page,
                         @Query("per_page") int per_page);

Xem lại ý nghĩa các param tại bài học trước ở link này nhé

Class FPhoto trong interface Call là class sử dụng để bóc tách json từ API trả về . Để tạo class này chúng ta sử dụng website . http://www.jsonschema2pojo.org/

Truy cập đường link test API trong bài trước, copy nội dung JSON vào trang nhấn nút Zip để tải toàn bộ các class bóc tách JSON về .
Lưu ý : thiết lập các thông số trước khi tải về như sau :

Target Language : Java
Source Type : JSON
Annotation Style : Gson

Sau khi tải và copy các class bóc tách JSON vào dự án. Chúng ta gọi câu lệnh lấy danh sách ảnh yêu thích tại MainActivity như sau :


public void callRequest() {
refreshLayout.setRefreshing(true);
MyRetrofitBuilder.getInstance().getListFavo(FULL_EXTRAS,
"1", USER_ID, "json", KEY_TOKEN, GET_FAVO, page,
15).enqueue(this);
}

Trong đó :
USER_ID : là mã tài khoản khi các bạn đăng kí tài khoản ở bài hướng dẫn phần 1
KEY_TOKEN : là mã truy cập của ứng dụng khi đăng kí ở bài hướng dẫn phần 2
GET_FAVO : là biến chứa giá trị action lấy danh sách ảnh yêu thích ( = “flickr.favorites.getList“)
FULL_EXTRAS : là danh sách các tham số muốn lấy thông tin của ảnh như link tải, kích thước …. (Xem chi tiết tại bài hướng dẫn số 2)
Ngoài ra 1 số tham số khác chúng ta xem chi tiết tại bài số 2 nhé .
this là hàm CallBack của Retrofit, hàm được gọi khi request thành công hoặc thất bại.
Trong ví dụ này, chúng ta implenment trực tiếp trong MainActivity nên truyền vào thông qua từ khóa this

Các em lưu ý khi tải code mẫu về cần điền User id và Token của mình vào mới chạy được nhé

Code mẫu : https://github.com/huuhuybn/DemoFlickr