Dự án: Tạo ứng dụng Bookshelf (Giá sách)

1. Trước khi bắt đầu

Điều kiện tiên quyết

  • Có thể tạo và chạy dự án trong Android Studio.
  • Có thể tạo bố cục trong Jetpack Compose.
  • Từng dùng coroutine trong Kotlin.
  • Từng dùng Retrofit, Coil và Gson.

Sản phẩm bạn sẽ tạo ra

  • Một ứng dụng Android đưa ra nhiều yêu cầu đối với một dịch vụ web và hiển thị các hình ảnh không đồng bộ đã tải xuống.

Bạn cần có

  • Một máy tính đã cài đặt Android Studio.

2. Tổng quan

Chúc mừng bạn đã hoàn thành bài 5!

Để thực hành các khái niệm bạn đã học được trong bài này, bao gồm coroutine, Retrofit và Gson, bạn sẽ tự xây dựng một ứng dụng hiển thị danh sách các cuốn sách kèm hình ảnh từ Google Books API (API Google Sách).

Theo dự kiến, ứng dụng đó sẽ thực hiện những việc sau:

  • Gửi yêu cầu đến API Google Sách bằng Retrofit.
  • Phân tích cú pháp phản hồi bằng Gson.
  • Hiển thị hình ảnh sách được tải xuống không đồng bộ cùng với tên sách trong lưới dọc.
  • Triển khai các phương pháp hay nhất, phân tách giao diện người dùng và lớp dữ liệu bằng cách sử dụng kho lưu trữ.
  • Viết bài kiểm tra mã yêu cầu dịch vụ mạng, sử dụng tính năng chèn phần phụ thuộc.

Dự án này có 2 mục tiêu. Trước tiên, bạn sẽ áp dụng tất cả các khái niệm đã học trong bài học này vào thực tế. Bạn cũng sẽ được làm việc với một API REST hoàn toàn mới, đọc tài liệu và áp dụng những kỹ năng đã học được vào một ứng dụng mới, giống như cách bạn làm với vai trò là một nhà phát triển Android chuyên nghiệp.

Ảnh chụp màn hình sau đây cho thấy một ví dụ về ứng dụng Bookshelf (Giá sách) đã hoàn tất. Bạn có quyền quyết định bố cục và sách chính xác mà ứng dụng hiển thị. Bạn có thể tìm hiểu thêm về cách truy xuất dữ liệu sách trong các phần sau.

9335665e21b79da1.png

3. Lên kế hoạch cho ứng dụng của bạn

Lên kế hoạch cho giao diện người dùng

Bạn có thể thiết kế giao diện người dùng của ứng dụng theo cách bạn muốn. Bạn cần xem xét cách ứng dụng thích ứng với các kiểu dáng thiết bị.

Vì đang sử dụng lưới cuộn hình ảnh, nên bạn cần tải nhiều hình ảnh cùng một lúc trên màn hình. Sau khi lấy URL của hình ảnh, bạn có thể sử dụng thành phần kết hợp AsyncImage do thư viện Coil cung cấp để tải dữ liệu xuống ở chế độ nền. Nếu có thể, hãy nhớ cho người dùng biết thời điểm ứng dụng của bạn đang dùng mạng.

Lên kế hoạch cho lớp mạng

Trong lộ trình 1 của bài học này, bạn đã tìm hiểu cách lấy dữ liệu từ mạng và phân tích cú pháp phản hồi JSON. Đối với ứng dụng Bookshelf (Giá sách), lớp dữ liệu cần thực hiện ba việc sau:

  • Tạo dịch vụ Retrofit để lấy dữ liệu từ API Google Sách.
  • Thêm phương thức cho dịch vụ để lấy danh sách các sách và nhận thông tin về một cuốn sách cụ thể.
  • Sử dụng Gson để trích xuất dữ liệu có ý nghĩa từ phản hồi JSON mà API trả về.

Hãy xem qua các phương thức của API Google Sách mà bạn cần dùng cho dự án này.

Tìm kiếm sách

Google Books API cung cấp một phương thức trả về danh sách các sách dựa trên một cụm từ tìm kiếm cụ thể, như mô tả trong phần Sử dụng API.

Ví dụ: URL này trả về kết quả tìm kiếm cho cụm từ "lịch sử nhạc jazz".

Ví dụ

https://www.googleapis.com/books/v1/volumes?q=jazz+history

Bạn có thể lọc nội dung tìm kiếm dựa vào nhiều tham số truy vấn. Đối với ứng dụng Bookshelf (Giá sách), tham số q (viết tắt của truy vấn) là đủ.

Tài liệu này cũng cho biết phản hồi JSON theo dự kiến. Đối với ứng dụng Bookshelf (Giá sách), bạn cần trích xuất id của cuốn sách.

Yêu cầu thông tin cho một cuốn sách cụ thể

Bạn cần phải yêu cầu nhận thông tin về một cuốn sách cụ thể. Điểm cuối này lấy mã nhận dạng mà bạn đã trích xuất từ phản hồi trước.

https://www.googleapis.com/books/v1/volumes/<volume_id>

Bạn có thể tìm thấy các đường liên kết đến hình thu nhỏ trong đối tượng imageLinks của đối tượng volumeInfo. Đối với ứng dụng này, các hình ảnh mà bạn muốn tải xuống nằm trong khoá thumbnail.

...
    "imageLinks": {
      "smallThumbnail": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=5&edge=curl&imgtk=AFLRE734s3CngIs16gM_Ht6GeGF4ew664I7oOGghmfk4pgfFcDYb4GlYCYdjtqqXluL2KUyfq_Ni5MSyv4JxEJ8W679zQ2Ib3okUKau3I1ruqBGrWOt2_haUauWC8sXEgjN7JHm4uOjS&source=gbs_api",
      "thumbnail": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&imgtk=AFLRE71N0ldzv6rliUV_K5ZACa9yPNcT8Ino6YKXJUMje_z4GsC9cp6gFql5TxlmqMoYN3CDhM3XAIO2riFeMXUnFVr5pTLq91htTtG1DDyvOdiR4yI6xu3yEEAn0dRbvNFZ5m7dUC9E&source=gbs_api",
      "small": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=2&edge=curl&imgtk=AFLRE71HmTwpoe3KR0AISYk5sDgV2Fz-F-6CDKJtFdvlXSZv3jEzFtsSXGJnEGjtCuoDMxP_6sgP8au1yadB7OmI2MhIBquel7ivcDB8e9ieLyh4HNoXnX3zmxfF_CfIfnNXDv0WHuyA&source=gbs_api",
      "medium": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=3&edge=curl&imgtk=AFLRE72LMPH7Q2S49aPeQ3Gm8jLEf6zH4ijuE0nvbOyXBUAgyL816pXzaw0136Pk8jXpfYYFY0IsqL7G7MMDMgKcJhnaoHojWNZpljZmGHeWLL_M7hxkOpmdmO7xza8dfVfPbFmBH4kl&source=gbs_api",
      "large": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=4&edge=curl&imgtk=AFLRE71w0J9EOzUzu1O5GMbwhnpI8BLWzOEtzqc9IfyxEDqimZ--H4JlNAZh_1zx8pqPNRf1qDt7FPb57lH5ip-LBlK3zjMC-MCBYcciuoPjTJOFmLv7pp5B6_-UFBap1KRfC0eG7P4d&source=gbs_api",
      "extraLarge": "http://books.google.com/books/publisher/content?id=EPUTEAAAQBAJ&printsec=frontcover&img=1&zoom=6&edge=curl&imgtk=AFLRE73t0gcxT-jzEETp8Yo5Osr15nVL7ntKL2WSe2S8kRSio7w0CGgErAq4WbPWIsH4TmOdP_EO6ZoPNSP-YGSOwqfPMw8_IlYE6hy9IKeAs5V_xaHy7drZleF0eizAQiEVg5ci7qby&source=gbs_api"
    },
...

Tải hình thu nhỏ của sách xuống

Sau khi có URL hình thu nhỏ, bạn có thể cung cấp URL này cho thành phần kết hợp AsyncImage trong mỗi mục trong lưới.

Thiết kế dành cho kiểm thử

Ngoài các khái niệm về kết nối mạng, bạn cũng đã tìm hiểu cách tái cấu trúc một ứng dụng để sử dụng lớp kho lưu trữ cho lớp dữ liệu. Đối với ứng dụng này, bạn nên chú trọng đến thiết kế dành cho kiểm thử, sử dụng kho lưu trữ để dễ dàng hoán đổi các nguồn dữ liệu với tính năng chèn phần phụ thuộc.

  • Thêm giao diện kho lưu trữ cho dịch vụ sách.
  • Triển khai một lớp kho lưu trữ truy cập vào dịch vụ Retrofit.
  • Triển khai một dịch vụ giả không đưa ra một yêu cầu thực đối với Google Books API (API Google Sách).
  • Viết một kiểm thử cho kho lưu trữ bằng cách sử dụng dịch vụ giả.

Dữ liệu về sách cần được truy xuất từ mạng thông qua kho lưu trữ. Nhờ vậy, bạn có thể dễ dàng hoán đổi các nguồn dữ liệu với tính năng chèn phần phụ thuộc.

4. Tạo ứng dụng Bookshelf (Giá sách)

Giờ đây, khi đã nắm được thông tin tổng quan về Google Books API (API Google Sách), đã đến lúc bạn xây dựng Bookshelf API (API Giá sách). Mặc dù đang sử dụng một dịch vụ web khác, nhưng bạn đã tìm hiểu hết các khái niệm cần thiết để hoàn thành dự án này. Bạn luôn có thể tham khảo các lớp học lập trình trước đây và các ứng dụng mẫu trong bài học này nếu cần ôn lại kiến thức. Các lớp học lập trình trong bài học này có thể hữu ích khi bạn làm việc trên dự án của mình.

Bạn nên hoàn thành hết các dự án trong khoá học này. Ngay cả khi bạn thấy tự tin về mọi kiến thức đã học được trong bài học này, rất có thể bạn sẽ cần xem lại các lớp học lập trình thường xuyên hơn bạn nghĩ. Mọi người cũng thường làm như vậy, ngay cả người hướng dẫn khoá học này! Vì vậy, hãy thoải mái với dự án này và thực hành những kiến thức bạn đã học được trước khi chuyển sang bài tiếp theo.