[Android Cơ Bản] Retrofit trong Android

Hi các em, trong bài viết này, thầy giới thiệu tới các em cách sử dụng thư viện Retrofit để viết HTTP Post và Get, đồng thời sử dụng thư viện GSON để bóc tách dữ liệu JSON
Để đọc hiểu tốt bài này yêu cầu các bạn đã nắm rõ cơ bản về khái niệm JSON, HTTP Request trước nhé .

Link thư viện : https://square.github.io/retrofit/

Trong bài này, thầy sử dụng 2 link api mẫu cho Http Post và Get như sau :

HTTP POST : https://jsonplaceholder.typicode.com/posts/1
Tham số : title: ‘foo’, body: ‘bar’, userId: 1
Header : “Content-type”: “application/json; charset=UTF-8”

HTTP GET : https://jsonplaceholder.typicode.com/posts
https://jsonplaceholder.typicode.com/todos/1

Chi tiết tài liệu api : https://jsonplaceholder.typicode.com/guide.html

Bước 1 : Thêm thư viện Retrofit và GSON

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

Lưu ý : Do retrofit đã sử dụng Java 8 nên chúng ta cũng cần thêm thuộc tính sau vào thẻ android trong file build.gradle

compileOptions {
    targetCompatibility = "8"
    sourceCompatibility = "8"
}

Bước 2 :

Tạo Class để khởi tạo đối tượng Retrofit mỗi khi gọi request

Ở đây chúng ta lưu ý tham số baseUrl là tên miền mình request nhé

Bước 3 : Khởi tạo file interface Retrofit định nghĩa kiểu request

Giải thích :
dòng 15, 16 : Khởi tạo 1 Http request GET với đường dẫn là posts, không yêu cầu tham số
Kiểu dữ liệu trả về là String (ở đây t chưa sử dụng thư viện GSON để bóc dữ liệu) nên tham số trong lớp Call là ResponseBody

dòng 20, 21 : Khởi tạo 1 Http request GET với đường dẫn là todos tuy nhiên vì link này có tham số là id nằm sau kí tự ‘/‘ nên chúng ta khai báo trong cặp ngoặc {} và dòng 21 sử dụng thẻ @Path để khai báo biến truyền vào
Lưu ý : trong trường hợp nếu mn sử dụng link request có dạng :
Https://abc.xyz/path?id=1&name=bean …
thì chúng ta thay @Path -> @Query nhé.

dòng 24, 25 : Khởi tạo 1 Http Request POST tương như nhưng khác thẻ @GET -> @POST và khi này các tham số khai báo bằng thẻ @Field

Bước 3 : Gọi request

Ở bước 3 chúng ta có 2 hàm là onResponse và onFailure
onResponse : xử lý sự kiện lấy dữ liệu thành công
onFailure : xử lý sự kiện lấy dữ liệu bị lỗi

Tương tự như vậy chúng ta gọi httpPost với cấu trúc tương tự nhưng có thêm 3 giá trị truyền vào như định nghĩa ở bên file Interface Rettrofit

Bước 4 : Sử dụng GSON để bóc tách dữ liệu

Gson là thư viện hỗ trợ lập trình viên bóc tách dữ liệu JSON tốt nhất và phổ biến hiện nay, khi sử dụng thư viện này chúng ta thường sử dụng kèm với website http://www.jsonschema2pojo.org/ để sinh code bóc tách dữ liệu từ dữ liệu JSON mẫu

Các em sử dụng phần mềm PostMan để test và lấy response đưa vào web jsonChema2pojo như sau :

Copy và Paste vào web rồi tùy chỉnh như sau :

Tùy chỉnh lần lượt theo các bước ghi trên hình

Tải file User.java vào thư mục dự án và thay đổi code như sau :
Lưu ý : các bạn mở thử file User.java sẽ thấy code được bổ sung thêm các thẻ @SerializedName là các “key” ở trong file json. Thư viện GSON sử dụng các key này để khớp – bóc tách dữ liệu


Do api trả về 1 mảng các user nên chúng ta viết trực tiếp giá trị trả về là List<User> với class User tải từ trang schemajson2pojo về

Câu lệnh request khi này thay đổi như sau :

Khi này, các bạn thấy ở dòng 53, chúng ta có thể lấy đối tượng mảng User và sử dụng trực tiếp mà ko cần thông qua các bước bóc tách json thông thường