Bối cảnh và vấn đề nghiên cứu

Sự phát triển của ngành công nghệ thông tin và truyền thông di động đã dẫn đến sự chuyển dịch lớn trong thói quen tiếp cận thông tin của người dùng. Máy tính cá nhân và điện thoại thông minh trở thành các công cụ làm việc và tra cứu dữ liệu phổ biến hàng ngày. Trong bối cảnh đó, việc xây dựng và phát triển các ứng dụng trên thiết bị di động trở thành một hướng đi kỹ thuật có tiềm năng ứng dụng cao. Thị trường hệ điều hành di động từng chứng kiến sự hiện diện của nhiều nền tảng như J2ME, iOS, Hybrid, Web-based Mobile Application và Android. Trong số đó, hệ điều hành Android do Google phát triển và thương mại hóa từ năm 2008 đã nhanh chóng mở rộng thị phần nhờ tính chất mã nguồn mở, khả năng tùy biến cao và sự hỗ trợ từ cộng đồng lập trình viên.

Về mặt thực tiễn đời sống, nhu cầu di chuyển, du lịch và hoạt động ngoài trời ngày càng gia tăng, kéo theo đòi hỏi tiếp cận thông tin dự báo thời tiết nhanh chóng, chính xác và trực quan ngay trên thiết bị cầm tay. Xuất phát từ nhu cầu đó, đề tài "Xây dựng ứng dụng Android lấy thông tin dự báo thời tiết" được sinh viên Trần Thanh Bình thực hiện dưới sự hướng dẫn của ThS. Phùng Anh Tuấn tại Trường Đại học Dân lập Hải Phòng (2019).

Mục tiêu và nhiệm vụ nghiên cứu của đồ án bao gồm:

  1. Tìm hiểu tổng quan về nền tảng hệ điều hành Android, lịch sử phát triển, kiến trúc hệ thống và vòng đời các thành phần cơ bản của một ứng dụng di động.
  2. Nắm vững môi trường phát triển tích hợp Android Studio, công cụ máy ảo Genymotion, các layout và control giao diện người dùng, cùng kỹ thuật quản lý và xử lý sự kiện tương tác.
  3. Nghiên cứu phương thức kết nối, xác thực và truy vấn dữ liệu từ dịch vụ cung cấp dữ liệu khí tượng trực tuyến OpenWeatherMap qua giao diện lập trình ứng dụng (API).
  4. Thiết kế và triển khai thực nghiệm ứng dụng trên nền tảng Android: xây dựng giao diện tương tác bằng XML, viết mã xử lý bất đồng bộ bằng Java với thư viện Volley và Picasso, phân tích chuỗi dữ liệu JSON trả về để hiển thị thời tiết hiện tại và dự báo các ngày tiếp theo.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Nền tảng hệ điều hành Android, ngôn ngữ lập trình Java/XML, công cụ Android Studio, dịch vụ dữ liệu OpenWeatherMap API, thư viện mạng Volley và thư viện xử lý ảnh Picasso.
  • Phạm vi không gian và công nghệ: Phát triển và chạy thực nghiệm trên môi trường máy ảo Android (Genymotion cấu hình Custom Phone - Android 5.0, API 22, độ phân giải 768x1280) và hệ điều hành máy tính Windows.
  • Phạm vi thời gian: Đồ án hoàn thành vào tháng 01 năm 2019, dữ liệu lý thuyết hệ điều hành cập nhật từ phiên bản Android 1.0 đến phiên bản Android 8.0 (Oreo).

Cơ sở lý thuyết và phương pháp

Khung lý thuyết và mô hình kiến trúc

Đồ án xây dựng dựa trên khung kiến trúc chuẩn của hệ điều hành Android. Nền tảng này được phân chia thành 4 lớp chính với 5 thành phần cốt lõi:

  • Nhân Linux (Linux Kernel 2.6): Đóng vai trò lớp trừu tượng hóa giữa phần cứng và phần mềm, quản lý bộ nhớ, tiến trình, bảo mật, ngăn xếp mạng và hệ thống driver điều khiển.
  • Lớp Thư viện (Libraries) & Thực thi Android (Android Runtime):
    • Thư viện C/C++: Gồm thư viện hệ thống BSD C (libc), thư viện đa phương tiện Media Framework (dựa trên PacketVideo OpenCORE hỗ trợ MPEG4, H.264, MP3, AAC, AMR, JPG, PNG), Surface Manager, LibWebCore (trình duyệt web), SGL (đồ họa 2D), thư viện đồ họa 3D (OpenGL ES 1.0 APIs), FreeType (kỹ thuật dựng font chữ bitmap và vector).
    • Android Runtime: Gồm hệ thống thư viện lõi Java và máy ảo Dalvik (Dalvik Virtual Machine - DVM). Dalvik hoạt động trên cơ chế thanh ghi (register-based), thực thi các tệp định dạng .dex (Dalvik Executable) được tối ưu hóa cho thiết bị có dung lượng bộ nhớ thấp và tận dụng nhân Linux để quản lý tiểu trình (threads).
  • Lớp Khung ứng dụng (Application Framework): Cung cấp các khối kiến trúc cho phép tái sử dụng, bao gồm Activity Manager (quản lý vòng đời ứng dụng), Content Provider (chia sẻ dữ liệu giữa các ứng dụng), Resource Manager (quản lý tài nguyên phi mã nguồn như chuỗi đa ngữ, layout XML, hình ảnh), Notification Manager (quản lý hiển thị cảnh báo trên thanh trạng thái), và hệ thống View kế thừa lẫn nhau.
  • Lớp Ứng dụng (Applications): Tầng giao tiếp trực tiếp với người sử dụng, bao gồm các ứng dụng gốc của hệ thống và các ứng dụng do nhà phát triển xây dựng.
Thành phần cơ bản Chức năng kỹ thuật trong hệ điều hành Android
Activity Thành phần trực quan biểu diễn một màn hình giao diện người dùng; quản lý tương tác và chu trình sống (lifecycle).
Service Thành phần thực thi ngầm trong nền hệ thống, không cung cấp giao diện người dùng trực tiếp, dùng để cập nhật dữ liệu hoặc phát âm thanh.
Broadcast Receiver Thành phần tiếp nhận và phản hồi các thông điệp truyền thông (Intent) phát ra từ hệ thống hoặc các ứng dụng khác.
Content Provider Cơ chế quản lý và chia sẻ tập dữ liệu chung giữa các ứng dụng thông qua giao tiếp bảo mật chuẩn.
Intent Cấu trúc thông điệp dùng để kích hoạt Activity, khởi chạy Service hoặc gửi thông điệp quảng bá dữ liệu.

Vòng đời của một Activity trong Android được kiểm soát bởi hệ thống thông qua 6 phương thức trạng thái cơ bản:

  1. onCreate(): Kích hoạt khi Activity được khởi tạo lần đầu; dùng để nạp layout và ánh xạ view.
  2. onStart(): Triệu gọi khi Activity chuẩn bị hiển thị tới người dùng.
  3. onResume(): Thực thi khi người dùng bắt đầu tương tác trực tiếp với màn hình.
  4. onPause(): Tạm dừng khi một Activity khác chiếm quyền hiển thị phía trước; không nhận dữ liệu nhập mới.
  5. onStop(): Kích hoạt khi Activity bị che khuất hoàn toàn và không còn nhìn thấy trong thời gian dài.
  6. onDestroy(): Triệu gọi trước khi Activity bị giải phóng hoàn toàn khỏi bộ nhớ hệ thống.

Dịch vụ dữ liệu OpenWeatherMap API

Hệ thống sử dụng dịch vụ OpenWeatherMap làm nguồn cung cấp dữ liệu thời tiết. Dịch vụ này thu thập và xử lý thông tin khí tượng từ hơn 40.000 trạm khí tượng toàn cầu, hỗ trợ xuất dữ liệu qua các định dạng chuẩn như JSON và XML:

  • Current weather data: Dữ liệu thời tiết tức thời tại hơn 200.000 vị trí địa lý.
  • 5 day / 3 hour forecast: Dữ liệu dự báo thời tiết 5 ngày kế tiếp, phân chia chi tiết theo chu kỳ mỗi 3 giờ.
  • 16 day forecast: Dữ liệu dự báo hàng ngày trong phạm vi 16 ngày tiếp theo.
  • Historical data: Dữ liệu thời tiết lịch sử (hỗ trợ các gói tài khoản Starter, Medium, History Bulk từ 1 tháng đến 5 năm).

Phương pháp nghiên cứu

  • Phương pháp thu thập và tổng hợp tài liệu: Khảo cứu tài liệu kỹ thuật của Google Developers, kiến trúc hệ điều hành Android, chuẩn API RESTful của OpenWeatherMap.
  • Phương pháp kỹ thuật phần mềm: Thiết kế giao diện bằng ngôn ngữ XML, lập trình xử lý logic hướng đối tượng trên ngôn ngữ Java, ứng dụng kiến trúc kết nối mạng Client-Server không đồng bộ.
  • Phương pháp thực nghiệm: Biên dịch dự án qua công cụ Android Studio, kiểm thử giao diện và luồng xử lý trên máy ảo Genymotion tích hợp Oracle VirtualBox.

Thiết kế và triển khai

Kiến trúc công nghệ và thư viện hỗ trợ

Hệ thống được phát triển với ngăn xếp công nghệ bao gồm:

  • Hệ điều hành máy trạm: Windows (hỗ trợ Windows 7/8/10, kiến trúc 32-bit hoặc 64-bit).
  • Môi trường phát triển tích hợp (IDE): Android Studio (xây dựng trên nền tảng IntelliJ IDEA), tích hợp Android SDK và Android Virtual Device (AVD).
  • Máy ảo kiểm thử: Genymotion kết hợp VirtualBox, cấu hình máy ảo kiểm thử tiêu chuẩn Custom Phone (Android 5.0 - API 22, kích thước màn hình 768x1280).
  • Thư viện bên thứ ba (Dependencies):
    • Volley: Thư viện xử lý truyền thông mạng HTTP do Google phát triển, tối ưu hóa các tiến trình gửi yêu cầu (StringRequest), quản lý hàng đợi (RequestQueue) và nhận phản hồi API bất đồng bộ.
    • Picasso: Thư viện mã nguồn mở hỗ trợ nạp (load), chuyển đổi và hiển thị hình ảnh từ URL vào ImageView trên giao diện Android.

Thiết kế giao diện (XML Layouts)

Giao diện ứng dụng được phân tách thành các tệp XML chuyên biệt:

  1. activity_main.xml: Màn hình chính sử dụng LinearLayout theo chiều dọc (android:orientation="vertical"), bao gồm các thẻ TextView hiển thị tên thành phố (txttp), quốc gia (txtqg), nhiệt độ hiện tại (txtnhietdo), trạng thái thời tiết (txttrangthai), độ ẩm (txtdrop), mây (txtcloud), tốc độ gió (txtwind), thời gian cập nhật (txtday), hình ảnh thời tiết (imgmay), và một RecyclerView (recycler_view) dùng để hiển thị danh sách dự báo thời tiết cho các ngày tiếp theo.
  2. recycler_item.xml: Thiết kế mẫu hiển thị từng phần tử trong RecyclerView cho 4 ngày tiếp theo, gồm TextView thứ trong tuần (tvDay), ImageView biểu tượng thời tiết (ivImage), và các TextView nhiệt độ nhỏ nhất/lớn nhất (tvMinTemp, tvMaxTemp).
  3. activity_main_menu.xml: Tệp tài nguyên menu định nghĩa ô tìm kiếm thành phố sử dụng widget android.widget.SearchView (menu_search), hiển thị dưới dạng icon tìm kiếm trên thanh tiêu đề (Toolbar).
  4. activity_main2.xml & dong_listview.xml: Màn hình mở rộng hiển thị dự báo thời tiết 7 ngày sử dụng ListView (lvview) kết hợp ImageView quay lại (imgback) và layout dòng danh sách định dạng 2 cột hiển thị ngày, trạng thái, icon và nhiệt độ min/max.

Xử lý sự kiện và tích hợp mạng

Các sự kiện trên giao diện được quản lý qua hai thành phần: Event Listener (Giao diện lắng nghe sự kiện) và Event Handler (Phương thức xử lý sự kiện).

Event Handler Event Listener Mô tả chức năng
onClick() OnClickListener() Xử lý khi người dùng chạm hoặc nhấn vào widget (Button, ImageView, TextView).
onLongClick() OnLongClickListener() Xử lý khi người dùng nhấn giữ widget trong một hoặc nhiều giây.
onFocusChange() OnFocusChangeListener() Bắt sự kiện khi một widget nhận hoặc mất trạng thái focus.
onKey() OnKeyListener() Xử lý khi người dùng nhấn hoặc nhả phím cứng/bàn phím trên thiết bị.
onTouch() OnTouchListener() Xử lý các cử chỉ tương tác chuyển động trực tiếp trên màn hình cảm ứng.
onMenuItemClick() OnMenuItemClickListener() Xử lý khi người dùng lựa chọn một mục chức năng trên menu.

Quy trình kết nối và bóc tách dữ liệu từ API OpenWeatherMap được thực hiện qua các bước kỹ thuật:

  • Khai báo quyền truy cập: Thêm quyền kết nối mạng vào tệp cấu hình:
<uses-permission android:name="android.INTERNET" />
  • Khởi tạo kết nối mạng qua Volley: Xây dựng hàm GetCurrentWeatherData(String data) tiếp nhận tham số tên thành phố, tạo đường dẫn truy vấn API: http://api.openweathermap.org/data/2.5/weather?q={City}&lang=vi&units=metric&appid={API_KEY}
  • Bóc tách cấu trúc JSON:
    • Lấy trường thời gian dt, chuyển đổi sang mili-giây và định dạng bằng SimpleDateFormat("EEEE yyyy-MM-dd HH:mm:ss").
    • Lấy trường tên thành phố name gán cho txttp.
    • Truy xuất mảng weather để trích xuất description (gán cho txttrangthai) và chuỗi icon để nạp ảnh động qua thư viện Picasso với URL: http://openweathermap.org/img/w/{icon}.png.
    • Truy xuất đối tượng main để lấy giá trị temp (nhiệt độ °C) và humidity (độ ẩm %).
    • Truy xuất đối tượng wind để lấy giá trị speed (tốc độ gió m/s) và đối tượng clouds để lấy độ che phủ mây (all %).
    • Truy xuất đối tượng sys để trích xuất mã quốc gia country.
  • Tìm kiếm tương tác: Gắn bộ lắng nghe OnQueryTextListener vào SearchView trong phương thức onCreateOptionsMenu(), truyền chuỗi dữ liệu nhập vào hàm GetCurrentWeatherData(city) để cập nhật giao diện thời gian thực.

Nội dung chính theo từng chương

CHƯƠNG 1: GIỚI THIỆU HỆ ĐIỀU HÀNH ANDROID

Chương 1 trình bày lịch sử hình thành và cấu trúc nền tảng của hệ điều hành Android. Tác giả nêu rõ Android khởi đầu từ Tổng công ty Android, được Google mua lại vào năm 2005 và chính thức ra mắt phiên bản thương mại Android 1.0 cùng thiết bị T-Mobile G1 vào tháng 10 năm 2008.

Chương này phân tích các bước phát triển quan trọng của hệ điều hành qua từng thời kỳ:

  • Sự xuất hiện của thanh thông báo vuốt (Notification Bar).
  • Khả năng tùy biến màn hình chính (Home Screen) bằng các widget (tiện ích đồng hồ, lịch, thời tiết) với sự đóng góp giao diện từ The Astonishing Tribe (TAT).
  • Tích hợp sâu rộng với hệ sinh thái dịch vụ của Google, đặc biệt là giao thức POP/IMAP cho Gmail.
  • Sự ra đời của kho ứng dụng Android Market (sau này là Google Play).
  • Các cải tiến trên các phiên bản đặt tên theo bảng chữ cái món ngọt, tiêu biểu là phiên bản Android 8.0 (Oreo) phát hành ngày 21 tháng 8 năm 2017 với các tính năng: Picture-in-Picture, Project Treble, giới hạn dữ liệu chạy nền, quản lý thông báo nâng cao và tự động điền mật khẩu.
  • Phân tích chi tiết mô hình kiến trúc hệ thống gồm 4 tầng (Nhân Linux 2.6, Thư viện C/C++ và Android Runtime với máy ảo Dalvik, Khung ứng dụng và Tầng ứng dụng).

CHƯƠNG 2: MÔI TRƯỜNG LẬP TRÌNH ANDROID STUDIO

Chương 2 hướng dẫn toàn diện về thiết lập môi trường phát triển và các thành phần cốt lõi của một ứng dụng Android. Nội dung bao gồm:

  • Quy trình cài đặt Android Studio dựa trên IntelliJ IDEA và tích hợp Android SDK.
  • Cấu hình máy ảo Genymotion kết hợp phần mềm ảo hóa VirtualBox để giả lập thiết bị thử nghiệm (chọn thiết bị Custom Phone, Android 5.0, API 22, độ phân giải 768x1280).
  • Cấu trúc thư mục của một dự án Android Studio gồm 3 module chính: manifests (chứa AndroidManifest.xml), java (chứa mã nguồn Java), và res (chứa tài nguyên layout, drawable, values, menu).
  • Phân vùng không gian làm việc của Android Studio thành 6 khu vực chức năng (Cấu trúc dự án, Bảng công cụ Control, Cây phân cấp Component Tree, Màn hình thiết kế trực quan Design Editor, Bảng thuộc tính Attributes, Thanh công cụ chức năng).
  • Khảo sát các thành phần cơ bản của ứng dụng: Activity (kèm phân tích chi tiết 6 trạng thái vòng đời), Service, Broadcast Receiver, Content Provider, Intent, Notification (Toast, AlertDialog), và các View/Layout cơ bản (FrameLayout, LinearLayout theo hàng ngang/cột dọc, RelativeLayout, TextView, EditText, ImageView, Button, ListView).
  • Kỹ thuật bắt và xử lý sự kiện giao diện thông qua hệ thống Event Listener và Event Handler.

CHƯƠNG 3: KỸ THUẬT XÂY DỰNG ỨNG DỤNG THỜI TIẾT

Chương 3 đi sâu vào các giải pháp kỹ thuật cụ thể để hiện thực hóa ứng dụng dự báo thời tiết:

  • Giới thiệu dịch vụ OpenWeatherMap: ý tưởng mở lấy cảm hứng từ OpenStreetMap/Wikipedia, mạng lưới thu thập từ hơn 40.000 trạm khí tượng, các gói dữ liệu thời tiết hiện tại (>200.000 vị trí), dự báo 5 ngày / 3 giờ, dự báo 16 ngày và dữ liệu lịch sử.
  • Hướng dẫn quy trình đăng ký tài khoản tại OpenWeatherMap để nhận khóa xác thực duy nhất (API Key).
  • Thiết kế giao diện chi tiết bằng mã nguồn XML: cấu trúc activity_main.xml cho màn hình chính, recycler_item.xml cho dự báo 4 ngày, activity_main_menu.xml cho thanh công cụ tìm kiếm, và activity_main2.xml cùng dong_listview.xml cho màn hình danh sách 7 ngày.
  • Kỹ thuật lấy và bóc tách dữ liệu mạng: cấu hình thư viện Volley và Picasso trong build.gradle, cấp quyền android.permission.INTERNET, định nghĩa các đối tượng giao diện và ánh xạ view qua findViewById(), triển khai phương thức GetCurrentWeatherData() kết hợp StringRequest, JSONObject, JSONArray để trích xuất các thông số nhiệt độ, độ ẩm, gió, mây, biểu tượng thời tiết và gắn sự kiện tìm kiếm động qua SearchView.

CHƯƠNG 4: CHƯƠNG TRÌNH THỰC NGHIỆM

Theo mục lục của tài liệu, Chương 4 trình bày kết quả thực nghiệm hoàn chỉnh của chương trình, bao gồm:

  • Phát biểu bài toán xây dựng ứng dụng thời tiết di động.
  • Xây dựng mô hình chức năng của toàn bộ hệ thống phần mềm.
  • Thiết lập mô hình hoạt động của ứng dụng khi tương tác với người dùng và máy chủ dữ liệu bên ngoài.
  • Thiết kế giao diện chương trình chi tiết và hoàn thiện các màn hình ứng dụng thực tế trên thiết bị di động.

Kết quả và đóng góp

Kết quả kỹ thuật đạt được

  • Hoàn thiện ứng dụng di động hoàn chỉnh: Ứng dụng Android có khả năng kết nối mạng qua giao thức HTTP, gửi yêu cầu có xác thực qua API Key đến máy chủ OpenWeatherMap và nhận về dữ liệu chuỗi định dạng JSON.
  • Bóc tách và hiển thị thông số thời tiết đa dạng: Ứng dụng trích xuất thành công các trường dữ liệu khí tượng chính xác:
    • Tên thành phố và quốc gia (chuỗi trích xuất từ khóa name và sys.country).
    • Thời gian cập nhật hệ thống (chuyển đổi từ định dạng UNIX timestamp dt).
    • Nhiệt độ hiện tại tính theo độ C (sử dụng tham số units=metric).
    • Trạng thái thời tiết bằng tiếng Việt (sử dụng tham số lang=vi).
    • Các thông số môi trường phụ trợ: Độ ẩm (%), độ che phủ mây (%), tốc độ gió (m/s).
    • Tự động nạp biểu tượng đồ họa mô tả thời tiết trực quan thông qua thư viện Picasso.
  • Tích hợp tính năng tìm kiếm: Cho phép người dùng tra cứu thông tin thời tiết linh hoạt tại các địa phương khác nhau bằng widget SearchView.
  • Hiển thị danh sách dự báo thời tiết: Tổ chức hiển thị dữ liệu dự báo nhiều ngày tiếp theo thông qua các view danh sách cuộn mượt mà (RecyclerView và ListView).

Đóng góp của đề tài

  • Hệ thống hóa toàn bộ kiến thức nền tảng về cấu trúc hệ điều hành Android, vòng đời ứng dụng và quy trình quản lý giao diện/sự kiện trong môi trường Android Studio.
  • Cung cấp tài liệu hướng dẫn thực hành từng bước (step-by-step) về cách thức tích hợp một dịch vụ web API của bên thứ ba (OpenWeatherMap) vào ứng dụng Android bằng các thư viện chuẩn (Volley, Picasso).
  • Đóng vai trò như một dự án mẫu hoàn chỉnh về xử lý bất đồng bộ dữ liệu JSON trong phát triển phần mềm di động trên nền tảng Java.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế

  • Hệ thống phụ thuộc hoàn toàn vào kết nối Internet liên tục; ứng dụng chưa có cơ chế lưu trữ đệm (caching) dữ liệu ngoại tuyến (offline) khi mất mạng.
  • Cơ chế tìm kiếm vị trí dựa trên việc nhập chuỗi ký tự tên thành phố thủ công, chưa tích hợp mô-đun định vị toàn cầu GPS hoặc Google Fused Location API để tự động phát hiện vị trí hiện tại của thiết bị.
  • Phạm vi dữ liệu và tần suất hiển thị phụ thuộc vào giới hạn truy vấn của gói tài khoản API miễn phí từ nhà cung cấp OpenWeatherMap.

Hướng phát triển tiếp

  • Tích hợp cơ chế định vị GPS tự động để nhận diện tọa độ địa lý (kinh độ, vĩ độ) của người dùng và tự động tải dữ liệu thời tiết tại vị trí hiện tại mà không cần nhập tên thành phố.
  • Bổ sung tiện ích Widget hiển thị trực tiếp thông tin thời tiết cập nhật trên màn hình chính (Home Screen) của thiết bị Android.
  • Xây dựng dịch vụ chạy nền (Service) kết hợp với thông báo hệ thống (Notification) để tự động đưa ra các cảnh báo thiên tai hoặc biến đổi thời tiết cực đoan (mưa bão, nhiệt độ cao).
  • Tích hợp cơ sở dữ liệu cục bộ (như SQLite hoặc Room Database) nhằm lưu trữ lịch sử tra cứu và hiển thị dữ liệu thời tiết đã nạp trước đó khi không có kết nối mạng.

Giá trị tham khảo

Tài liệu khóa luận có giá trị tham khảo thiết thực cho các nhóm đối tượng sau:

  • Sinh viên chuyên ngành Công nghệ thông tin và Kỹ thuật phần mềm: Là tài liệu học tập phù hợp cho các học phần Lập trình thiết bị di động, Lập trình Java, và Phát triển ứng dụng phân tán.
  • Người mới bắt đầu lập trình Android: Cung cấp hướng dẫn rõ ràng về cách cài đặt, cấu hình IDE Android Studio, thiết lập máy ảo Genymotion, quản lý vòng đời Activity và xây dựng giao diện từ cơ bản đến nâng cao bằng XML.
  • Lập trình viên cần tích hợp RESTful API: Cung cấp giải pháp mẫu chi tiết về việc sử dụng thư viện Volley để gửi yêu cầu HTTP GET, xử lý phân tích dữ liệu JSON lồng nhau (JSONObject, JSONArray), và sử dụng thư viện Picasso để tải ảnh bất đồng bộ từ URL.

Câu hỏi thường gặp

1. Nguồn cung cấp dữ liệu thời tiết được sử dụng trong khóa luận lấy từ đâu và có đặc điểm gì?

Ứng dụng sử dụng API từ dịch vụ trực tuyến OpenWeatherMap. Dịch vụ này tổng hợp dữ liệu từ mạng lưới phát sóng khí tượng toàn cầu và hơn 40.000 trạm khí tượng. Dữ liệu cung cấp bao gồm thời tiết hiện tại tại hơn 200.000 vị trí, dự báo 5 ngày theo chu kỳ 3 giờ, dự báo 16 ngày và dữ liệu thời tiết lịch sử, được trả về dưới định dạng chuẩn JSON hoặc XML.

2. Kiến trúc của hệ điều hành Android được trình bày trong đồ án gồm những tầng nào?

Kiến trúc Android được cấu thành từ 4 lớp chính chứa 5 thành phần:

  1. Tầng nhân Linux (Linux Kernel phiên bản 2.6).
  2. Tầng thư viện C/C++ hệ thống (libc, Media, Surface Manager, LibWebCore, SGL, 3D, FreeType).
  3. Tầng thực thi Android (Android Runtime) bao gồm thư viện lõi Java và máy ảo Dalvik (Dalvik VM).
  4. Tầng khung ứng dụng (Application Framework gồm Activity Manager, Content Provider, Resource Manager, Notification Manager, View System).
  5. Tầng ứng dụng (Applications).

3. Những thư viện bổ trợ bên ngoài (dependencies) nào được tích hợp vào dự án?

Tác giả đã tích hợp 2 thư viện mã nguồn mở vào tệp build.gradle:

  • Volley: Thư viện mạng của Google giúp kết nối HTTP, quản lý hàng đợi gửi yêu cầu và nhận kết quả phản hồi nhanh chóng.
  • Picasso: Thư viện hỗ trợ nạp, xử lý và hiển thị hình ảnh tự động từ đường dẫn URL trên Internet vào ImageView.

4. Vòng đời của một Activity trong Android bao gồm các phương thức cơ bản nào?

Vòng đời Activity gồm 6 phương thức chính:

  • onCreate(): Khởi tạo giao diện và tài nguyên ban đầu khi Activity được gọi.
  • onStart(): Khi Activity bắt đầu xuất hiện trước người dùng.
  • onResume(): Khi Activity sẵn sàng tương tác trực tiếp với người dùng.
  • onPause(): Tạm dừng tương tác khi có một Activity khác che một phần màn hình.
  • onStop(): Khi Activity không còn hiển thị trên màn hình trong thời gian dài.
  • onDestroy(): Trước khi Activity bị hệ thống hủy bỏ hoàn toàn.

5. Ứng dụng thực hiện việc chuyển đổi và xử lý chuỗi JSON từ OpenWeatherMap như thế nào?

Sau khi nhận phản hồi chuỗi từ yêu cầu StringRequest của thư viện Volley, phương thức onResponse() sử dụng đối tượng JSONObject để trích xuất các trường dữ liệu: chuỗi name (tên thành phố), mảng weather (lấy description trạng thái và mã icon), đối tượng main (lấy temp và humidity), đối tượng wind (lấy speed), đối tượng clouds (lấy all), đối tượng sys (lấy country), và trường dt được định dạng sang ngày giờ cụ thể thông qua SimpleDateFormat.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng Android lấy thông tin dự báo thời tiết" của sinh viên Trần Thanh Bình đã hoàn thành các mục tiêu nghiên cứu và phát triển phần mềm di động theo yêu cầu của ngành Công nghệ thông tin. Tác giả đã hệ thống hóa cơ sở lý thuyết về kiến trúc hệ điều hành Android, công cụ phát triển Android Studio và các thành phần cốt lõi của một ứng dụng di động. Thông qua việc tích hợp API OpenWeatherMap cùng các thư viện Volley và Picasso, đồ án đã hiện thực hóa thành công một sản phẩm ứng dụng thời tiết có khả năng tra cứu và hiển thị trực quan các thông số khí tượng theo thời gian thực và theo chu kỳ nhiều ngày. Đây là công trình thực nghiệm hoàn chỉnh, có kết cấu mạch lạc và mang tính ứng dụng tham khảo cao cho việc phát triển ứng dụng di động kết nối dịch vụ dữ liệu ngoài.