1. Trước khi bắt đầu
Điều kiện tiên quyết
- Có kiến thức cơ bản về SQL để đọc và thao tác với cơ sở dữ liệu quan hệ.
- Có thể sử dụng Room trong ứng dụng Android để đọc dữ liệu từ cơ sở dữ liệu và ghi vào cơ sở dữ liệu.
- Có thể sử dụng DataStore để lưu trữ dữ liệu đơn giản.
- Có thể xây dựng giao diện người dùng có độ phức tạp vừa phải bằng Compose.
Sản phẩm bạn sẽ tạo ra
- Một ứng dụng Android sẽ hỏi người dùng về sân bay khởi hành, tìm kiếm trong cơ sở dữ liệu được điền sẵn để trình bày danh sách chuyến bay khởi hành từ sân bay đó, cho phép người dùng lưu các chuyến bay yêu thích và cập nhật cơ sở dữ liệu bằng Room.
Bạn cần có
- Máy tính đã cài đặt Android Studio
2. Tổng quan
Chúc mừng bạn đã hoàn thành Học phần 6! Bạn đã bắt đầu bằng kiến thức tổng quan chung về cơ sở dữ liệu quan hệ và Ngôn ngữ truy vấn có cấu trúc (SQL), tích hợp cơ sở dữ liệu quan hệ vào ứng dụng bằng Room, và tìm hiểu về Preferences DataStore để lưu trữ các chế độ cài đặt và trạng thái giao diện người dùng. Đã đến lúc áp dụng mọi kiến thức bạn học được vào thực tế.
Trong dự án này, bạn sẽ tạo ứng dụng Flight Search (Tìm kiếm chuyến bay), trong đó người dùng nhập một sân bay và có thể xem danh sách điểm đến mà sân bay đó là điểm khởi hành. Dự án này mang đến cho bạn cơ hội thực hành các kỹ năng SQL, Room và DataStore bằng cách đề ra một tập hợp yêu cầu mà ứng dụng của bạn phải đáp ứng. Cụ thể, ứng dụng Flight Search (Tìm kiếm chuyến bay) của bạn cần đáp ứng các yêu cầu sau:
- Cung cấp một trường văn bản để người dùng nhập tên sân bay hoặc mã nhận dạng sân bay của Hiệp hội Vận tải Hàng không Quốc tế (IATA).
- Truy vấn cơ sở dữ liệu để cung cấp đề xuất tự động hoàn thành khi người dùng nhập.
- Khi người dùng chọn một đề xuất, hãy tạo một danh sách các chuyến bay còn chỗ (bao gồm mã nhận dạng IATA và tên sân bay) xuất phát từ sân bay đó đến các sân bay khác trong cơ sở dữ liệu.
- Cho phép người dùng lưu các chặng bay riêng lẻ yêu thích.
- Khi không có truy vấn tìm kiếm nào được nhập vào, hãy cho thấy mọi chặng yêu thích do người dùng chọn trong một danh sách.
- Lưu văn bản tìm kiếm bằng Preferences DataStore. Khi người dùng mở lại ứng dụng, văn bản tìm kiếm (nếu có) cần điền sẵn vào trường văn bản này bằng các kết quả phù hợp trong cơ sở dữ liệu.
Đối với dự án này, chúng tôi đã điền sẵn cơ sở dữ liệu cho bạn. Tuy nhiên, chúng tôi kỳ vọng bạn sẽ xây dựng ứng dụng từ đầu theo các yêu cầu. Đây sẽ là bài thực hành giúp bạn làm quen với công việc thực tế của nhà phát triển Android. Dự án này cũng là cơ hội tốt để bạn xem lại hoặc tinh chỉnh thêm kỹ năng xây dựng giao diện người dùng bằng Compose, vì kể từ Bài 4 bạn chưa phải xử lý nhiều việc liên quan đến giao diện người dùng.
3. Lấy cơ sở dữ liệu chuyến bay
Dữ liệu của ứng dụng này được lấy từ cơ sở dữ liệu chuyến bay. Cơ sở dữ liệu chuyến bay chứa hai bảng là airport (sân bay) và favorite (yêu thích).
Bảng airport (sân bay) chứa giản đồ sau.
Cột | Kiểu dữ liệu | Mô tả |
id | INTEGER (SỐ NGUYÊN) | Mã nhận dạng duy nhất (khoá chính) |
iata_code | VARCHAR | Mã IATA gồm 3 chữ cái |
tên | VARCHAR | Tên đầy đủ của sân bay |
hành khách | INTEGER (SỐ NGUYÊN) | Số lượng hành khách mỗi năm |
Bảng favorite (yêu thích) chứa giản đồ sau.
Cột | Kiểu dữ liệu | Mô tả |
id | INTEGER (SỐ NGUYÊN) | Mã nhận dạng duy nhất (khoá chính) |
departure_code | VARCHAR | Mã IATA của sân bay khởi hành |
destination_code | VARCHAR | Mã IATA của sân bay điểm đến |
Bạn có thể sử dụng bảng airport (sân bay) để tìm kiếm các sân bay và xây dựng danh sách các chuyến bay tiềm năng. Bạn sẽ dùng bảng favorite (yêu thích) – ban đầu trống – để lưu các cặp điểm khởi hành và điểm đến do người dùng chọn.
Tải tệp flight_search.db
qua nhánh project
của kho lưu trữ GitHub về SQL cơ bản tại đây.
4. 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
Chúng tôi hoan nghênh bạn thiết kế ứng dụng của mình theo cách bạn muốn. Các mô tả và hình ảnh sau đây đóng vai trò như hướng dẫn, là ví dụ về những điều mà có thể người dùng mong đợi trong ứng dụng.
Trong lần đầu mở ứng dụng, người dùng sẽ thấy một màn hình trống với trường văn bản, nhắc họ nhập một sân bay.
Khi người dùng bắt đầu nhập, ứng dụng sẽ hiện danh sách đề xuất tự động hoàn thành khớp với tên hoặc mã nhận dạng của sân bay.
Khi người dùng chọn một đề xuất, ứng dụng sẽ hiện danh sách tất cả chuyến bay có thể xuất phát từ sân bay đó. Mỗi mục đều có mã nhận dạng và tên của cả hai sân bay, và một nút để lưu điểm đến làm mục yêu thích. Bạn có thể thoải mái thử nghiệm bố cục, miễn là bố cục đó truyền tải được tất cả thông tin cần thiết.
Khi người dùng xoá hộp tìm kiếm hoặc không nhập cụm từ tìm kiếm, ứng dụng sẽ hiện danh sách điểm đến yêu thích đã lưu (nếu có).
Dùng Room để tích hợp cơ sở dữ liệu chuyến bay
Để triển khai các tính năng trên, bạn cần phải tận dụng kiến thức về SQL và Room. Cơ sở dữ liệu chuyến bay chứa hai bảng là airport (sân bay) và favorite (yêu thích), và bạn cần tạo các thực thể tương ứng với từng bảng này. Hãy chọn các kiểu dữ liệu Kotlin phù hợp để bạn có thể truy cập vào các giá trị trong mỗi bảng.
Ngoài ra, bạn cần cân nhắc các yêu cầu sau đây khi truy vấn cơ sở dữ liệu chuyến bay và duy trì dữ liệu:
- Tìm kiếm đề xuất tự động hoàn thành trong bảng airport (sân bay). Xin lưu ý rằng có thể người dùng đã biết mã sân bay. Vì vậy, ngoài cột
name
, bạn cần đối chiếu thông tin của họ với cộtiata_code
. Hãy nhớ rằng bạn có thể sử dụng từ khoáLIKE
để thực hiện tìm kiếm bằng văn bản. - Cho thấy các sân bay thường được ghé thăm theo thứ tự giảm dần bằng cách sắp xếp theo cột hành khách.
- Giả sử mỗi sân bay đều có chuyến bay đến mọi sân bay khác trong cơ sở dữ liệu (ngoại trừ chính sân bay đó).
- Khi không có văn bản trong hộp tìm kiếm, hãy cho thấy một danh sách chuyến bay yêu thích, điểm khởi hành và điểm đến. Do bảng favorite (yêu thích) chỉ gồm các cột dành cho dữ liệu mã sân bay, nên dự kiến là bạn sẽ không cho thấy tên sân bay trong danh sách này.
- Thực hiện tất cả hoạt động truy vấn cơ sở dữ liệu bằng các API SQL và Room. Toàn bộ vấn đề là làm sao để KHÔNG tải toàn bộ cơ sở dữ liệu vào bộ nhớ cùng lúc, mà chỉ truy xuất dữ liệu cần thiết khi cần.
Duy trì trạng thái người dùng với Preferences DataStore
Ngoài SQL và Room, bạn cũng nắm được cách lưu trữ các giá trị riêng lẻ như các chế độ cài đặt của người dùng. Đối với ứng dụng Flight Search (Tìm kiếm chuyến bay), bạn cần lưu trữ chuỗi tìm kiếm của người dùng trong Preferences DataStore để chuỗi này được điền khi người dùng chạy lại ứng dụng. Nếu trường văn bản trống khi người dùng thoát khỏi ứng dụng, thì bạn cần chuyển sang hiển thị danh sách chuyến bay yêu thích.
5. Xây dựng ứng dụng Flight Search (Tìm kiếm chuyến bay)
Bạn đã đọc hết các yêu cầu, đã đến lúc tạo ứng dụng. Tuy bài này chỉ tập trung vào việc duy trì dữ liệu, nhưng điều quan trọng là bạn phải tiếp tục tích luỹ được kiến thức thông qua thực hành. Mặc dù bạn đã thấy ảnh chụp màn hình mẫu của ứng dụng Flight Search (Tìm kiếm chuyến bay) trong thực tế, nhưng dự án này chính là cơ hội để bạn tạo ứng dụng riêng của mình và trở nên nổi bật.
Đúng ra thì những nhiệm vụ này không quen thuộc với bạn, nhưng bạn đã biết tất cả khái niệm chính cần thiết để xây dựng dự án này. Nếu gặp khó khăn hoặc cần ôn tập lại, bạn có thể tham khảo các lớp học lập trình trước.
Những điều dưới đây có thể hữu ích khi bạn làm việc trên dự án của mình:
- Sử dụng SQL để đọc và ghi vào cơ sở dữ liệu
- Duy trì dữ liệu thông qua Room
- Đọc và cập nhật dữ liệu thông qua Room
- Lưu lựa chọn ưu tiên trên thiết bị bằng DataStore
Quan trọng nhất, hãy tận hưởng quá trình này! Việc học là cả một cuộc hành trình. Ngay cả khi cảm thấy dự án này khó khăn, có thể bạn vẫn sẽ học hỏi được điều gì đó mới mẻ và sẽ dễ dàng giải quyết các vấn đề tương tự trong tương lai. Chúc bạn vui vẻ và hẹn gặp lại trong bài học tiếp theo!