1. Trang chủ
  2. » Tất cả

Báo cáo đồ án xây dựng ứng dụng theo dõi sức khỏe theo chuẩn đại học xây dựng

85 19 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 85
Dung lượng 3,1 MB
File đính kèm ung-dung-theo-doi-suc-khoe.zip (3 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1 ĐẶT VẤN ĐỀ VÀ ĐỊNH HƯỚNG GIẢI PHÁP (13)
    • I. Giới thiệu bài toán (13)
      • 1. Xu hướng sử dụng điện thoại thông minh trong chăm sóc sức khỏe (13)
      • 2. Phương pháp đo nhịp tim mới (13)
      • 3. Lợi ích khi sử dụng ứng dụng theo dõi sức khỏe (14)
    • II. Mục tiêu đề tài (14)
    • III. Các vấn đề cần giải quyết (14)
      • 1. Nội dung đồ án (14)
      • 2. Công cụ sử dụng (15)
  • CHƯƠNG 2 TÌM HIỂU THUẬT TOÁN ĐO NHỊP TIM BẰNG CAMERA 16 I. Giới thiệu về thuật toán (16)
    • II. Các bước xử lý dữ liệu (17)
      • 1. Thu nhận tín hiệu Video (17)
      • 2. Tính toán tín hiệu độ sáng (17)
      • 3. Lọc băng thông (18)
      • 4. Biến đổi Fourier nhanh (20)
      • 5. Phát hiện đỉnh (22)
      • 6. Làm mịn (23)
    • III. Nguồn nhiễu gây ảnh hưởng đến kết quả (25)
  • CHƯƠNG 3 TÌM HIỂU VỀ FIREBASE (26)
    • I. Tìm hiểu về Firebase (26)
      • 1. Firebase là gì? (26)
      • 2. Firebase services (26)
    • II. Realtime Database (27)
      • 1. Giới thiệu về Realtime Database (27)
      • 2. Cách cài đặt Firebase (27)
      • 3. Cách sử dụng Realtime Database trong Android Studio (29)
    • III. Lý do sử dụng Firebase để giải quyết bài toán (33)
  • CHƯƠNG 4 PHÂN TÍCH THIẾT KẾ VÀ CÀI ĐẶT HỆ THỐNG (34)
    • I. Phân tích chức năng hệ thống (34)
      • 1. Biểu đồ Use case (34)
      • 2. Biểu đồ Sequence (40)
      • 3. Biểu đồ Class (61)
      • 4. Biểu đồ Activity (67)
    • II. Xây dựng cơ sở dữ liệu (72)
    • III. Kết quả đạt được (73)
      • 1. Giao diện màn hình Login Activity (73)
      • 2. Giao diện màn hình SignUpActivity (74)
      • 3. Giao diện màn hình MainActivity (75)
      • 4. Giao diện màn hình Đo nhịp tim bằng camera (76)
      • 5. Giao diện màn hình Nhập giá trị nhịp tim (77)
      • 6. Giao diện màn hình Hiển thị kết quả đo (78)
      • 7. Giao diện màn hình Quản lý dữ liệu đo (79)
      • 8. Giao diện màn hình Xem bài tập bổ trợ (80)
      • 9. Giao diện màn hình Xem thông tin tài khoản (82)
      • 10. Giao diện màn hình Thay đổi mật khẩu (83)
  • CHƯƠNG 5 KẾT LUẬN VÀ ĐỊNH HƯỚNG PHÁT TRIỂN (84)
    • I. Kết quả thực hiện (84)
    • II. Định hướng phát triển (84)
  • TÀI LIỆU THAM KHẢO (85)

Nội dung

Sức khỏe là một trong những điều mà con người quan tâm nhất hiện nay. Tuy nhiên trong thời đại hiện nay, con người luôn bị cuốn vào công việc, và điều đó dẫn đến việc họ khó có thể bỏ ra một khoảng thời gian thường xuyên để đến các bệnh viện nhằm theo dõi được sức khỏe của mình. Từ đây, ngành y học cho ra một bài toán mới. Làm sao để con người theo dõi được sức khỏe của mình một cách tốt nhất mà lại không cần tốn quá nhiều thời gian và công sức? Trong nền công nghiệp 4.0, bài toán này đã được giải quyết triệt để thông qua các thiết bị đeo có khả năng theo dõi sức khỏe hay đồng hồ thông minh… Qua doanh số thu được từ các thiết bị đeo cũng như đồng hồ thông minh ngày càng tăng, ta có thể thấy nhu cầu của người dùng đối với vấn đề sức khỏe là rất lớn. Nhưng có một vấn đề xảy ra là không phải người dùng nào cũng đều có điều kiện cũng như nhu cầu sắm thêm cho mình những chiếc thiết bị trên. Vì vậy, giải pháp khác được ra đời. Đó chính là việc người sử dụng có thể theo dõi sức khỏe bằng cách sử dụng các ứng dụng co sẵn trên điện thoại di động và máy tính bảng. Bằng cách này, người sử dụng vừa tiết kiệm được tiền bạc, vừa không phải tốn nhiều thời gian đến các bệnh viện mà vẫn có thể biết được tình hình sức khỏe hiện tại của bản thân.

TÌM HIỂU THUẬT TOÁN ĐO NHỊP TIM BẰNG CAMERA 16 I Giới thiệu về thuật toán

Các bước xử lý dữ liệu

1 Thu nhận tín hiệu Video

Băng thông, hay còn gọi là bandwidth, là thuật ngữ chỉ lưu lượng tín hiệu điện truyền qua thiết bị trong một giây Trong việc lấy mẫu tín hiệu ECG, điều quan trọng đầu tiên cần xem xét là băng thông, chính là dải tần số nhịp tim của con người Hiểu rõ về băng thông giúp đảm bảo chất lượng dữ liệu thu thập và xử lý chính xác các tín hiệu sinh lý quan trọng.

Nhịp tim bình thường của con người dao động từ 60 đến 200 nhịp/phút (bmp), phụ thuộc vào độ tuổi, mức độ thể chất và hoạt động hàng ngày Trong nghiên cứu này, tín hiệu đích được xác định trong khoảng từ 40 đến 230 bmp, tương ứng với dải băng thông từ 0.667 Hz đến 3.833 Hz Điều này giúp tối ưu hóa quá trình xử lý tín hiệu và phân tích nhịp tim dựa trên các chỉ số khoa học chính xác.

Theo định lý lấy mẫu Nyquist, để thu được toàn bộ dải tần số nhịp tim một cách chính xác mà không xảy ra hiện tượng răng cưa, tần số lấy mẫu cần phải ít nhất gấp đôi giá trị cao nhất của tín hiệu Cụ thể, tần số lấy mẫu yêu cầu phải lớn hơn hoặc bằng 7.667 Hz để đảm bảo độ chính xác trong quá trình thu nhận dữ liệu nhịp tim.

2 Tính toán tín hiệu độ sáng a Các khái niệm cần biết

Trong quá trình tạo video, khái niệm “Frame” hay còn gọi là khung hình đóng vai trò quan trọng, là những hình ảnh tĩnh ghép lại để tạo thành hình ảnh chuyển động liên tục Mỗi khung hình được trình chiếu trong một khoảng thời gian ngắn rồi nhanh chóng thay thế bằng khung hình tiếp theo, tạo ra hiệu ứng chuyển động nhờ khả năng liên kết của thị giác người xem Tốc độ khung hình trên mỗi giây (FPS) quyết định độ mượt của video, với tốc độ cao hơn mang lại hình ảnh chuyển động nhanh và mượt mà hơn, còn tốc độ thấp hơn gây ra hiệu ứng chậm, rung rinh và không mượt.

Video là một chuỗi các ảnh hoặc khung hình liên tiếp tạo cảm giác chuyển động mượt mà, thường với tốc độ từ 25-30 fps để đảm bảo hình ảnh rõ nét và không gây mỏi mắt Trong bài toán này, đầu vào là một video được ghi lại từ camera điện thoại di động, với tốc độ quay phụ thuộc vào thiết bị Quá trình xử lý tín hiệu độ sáng đóng vai trò quan trọng trong việc nâng cao chất lượng hình ảnh, giúp giảm nhiễu và cải thiện độ tương phản của video.

Tín hiệu cần xử lý là độ sáng của da theo thời gian, tuy nhiên không thể đảm bảo tất cả các điểm ảnh đều chứa biến thể độ sáng mong muốn Do đó, ta sẽ tổng hợp tất cả các pixel thành một giá trị độ sáng trung bình trên mỗi khung hình để dễ dàng phân tích Để thực hiện thuật toán trong thời gian thực một cách hiệu quả, thay vì tính toán độ sáng trên cả ba mặt phẳng RGB, ta sẽ chỉ tập trung vào mức trung bình của tất cả các pixel trên mặt phẳng màu đỏ (R).

Ta sẽ có công thức biểu diễn hàm độ sáng màu đỏ của mẫu thứ n như sau: b [ n ] = 1

Trong đó: W: Chiều rộng của ảnh (pixel).

H: Chiều dài của ảnh (pixel).

V[n, x, y, 1]: Mức ánh sáng của mặt phẳng màu đỏ tại tọa độ (x, y) ở frame thứ n trong video.

This Matlab code processes video brightness by reading each frame from a video file, extracting the red color plane, and calculating the average brightness of that plane The script initializes a brightness array, iterates through all video frames, and computes the mean brightness for each frame based on the red channel data Implementing this code helps analyze video luminance levels efficiently, making it ideal for applications such as video quality assessment and brightness adjustment.

Vì kích thước hình ảnh luôn giữ nguyên theo thời gian, chúng ta tập trung vào hình dạng của tín hiệu mà không quan tâm đến biên độ của nó Do đó, việc bỏ qua việc chia tổng độ sáng màu đỏ cho tổng số pixel của khung hình có thể được thực hiện, giúp tối ưu quá trình xử lý hình ảnh một cách hiệu quả.

Sau khi thu nhận tín hiệu, bộ lọc băng thông giúp loại bỏ các tần số nằm ngoài dải quan sát, giảm nhiễu và cải thiện độ chính xác của kết quả Nhờ đó, các bước xử lý sau trở nên hiệu quả hơn và kết quả nhịp tim thu được mượt mà hơn Trong quá trình này, bộ lọc Butterworth thường được sử dụng để đảm bảo lọc băng thông hiệu quả và ổn định.

Bộ lọc Butterworth là loại bộ lọc xử lý tín hiệu nổi bật với khả năng đáp ứng tần số bằng phẳng tối đa trong toàn bộ băng thông, còn được gọi là bộ lọc cường độ phẳng tối đa Đặc điểm chính của bộ lọc này là đáp ứng tần số tối ưu, chuyển dốc về không trong băng tần, giúp thay đổi cường độ một cách đều đặn theo ω Khác với các loại bộ lọc khác, bộ lọc Butterworth duy trì đường biểu diễn sóng không sai lệch tại băng thông hoặc băng tần, mang lại hiệu suất xử lý tín hiệu ổn định và chính xác.

Bộ lọc Butterworth có các thuộc tính sau:

- Đáp ứng biên độ đơn điệu trong cả băng thông và băng tần

- Chuyển dốc nhanh chóng quanh tần số cắt, cải thiện theo chiều tăng dần

- Đáp ứng pha không tuyến tính

- Trong trường hợp vượt quá đáng kể, đáp ứng biên độ sẽ suy giảm theo chiều tăng dần

- Độ trễ nhóm phụ thuộc lớn vào tần số

Dưới đây là hình ảnh cho thấy mức tăng của bộ lọc Butterworth theo thời gian rời rạc bên cạnh các bộ lọc phổ biến khác

Hình 3 Hình ảnh so sánh bộ lọc Butterworth với các bộ lọc khác

Việc sử dụng bộ lọc Butterworth mang lại kết quả mượt mà hơn so với các bộ lọc khác, tạo điều kiện thuận lợi cho các bước xử lý tiếp theo và nâng cao độ chính xác của kết quả đo nhịp tim Bộ lọc này là loại IIR (các bộ lọc đáp ứng xung vô hạn), yêu cầu ít bước tính toán hơn so với bộ lọc FIR (đáp ứng xung hữu hạn), đặc biệt phù hợp cho các ứng dụng băng thông thấp Bên cạnh đó, Butterworth có đặc điểm băng thông phẳng và băng tần phẳng, giúp loại bỏ các gợn sóng nhờ khả năng tránh ưu tiên tần số nhất định so với các tần số khác trong phạm vi hợp lệ Điều này đảm bảo khả năng xử lý tín hiệu chính xác và ổn định hơn.

Ta có đoạn Matlab code sử dụng Butterworth dùng để lọc trong bài toán này như sau:

BPM_L = 40; % Heart rate lower limit [bpm]

BPM_H = 230; % Heart rate higher limit [bpm]

% Butterworth frequencies must be in [0, 1], where 1 corresponds to half the sampling rate [b, a] = butter(2, [((BPM_L / 60) / v.FrameRate * 2), ((BPM_H / 60) / v.FrameRate * 2)]); filtBrightness = filter(b, a, brightness);

% Cut the initial stabilization time filtBrightness = filtBrightness((v.FrameRate * FILTER_STABILIZATION_TIME + 1):size(filtBrightness, 2));

Trong quá trình lọc tín hiệu, giây đầu tiên của tín hiệu sẽ bị loại bỏ để đảm bảo loại bỏ hoàn toàn độ lệch tín hiệu không đổi Khoảng thời gian này rất quan trọng, vì nếu không được loại bỏ, chúng ta có thể nhận phải những thông tin sai lệch về nhịp tim trong giai đoạn ổn định của tín hiệu Việc loại bỏ phần này giúp cải thiện độ chính xác và độ tin cậy của dữ liệu nhịp tim.

Hình 4 Bên trái là đáp ứng tần số bộ lọc Bên phải là tín hiệu ban đầu (Blue) và tín hiệu được lọc (Green)

Các phép biến đổi Fourier rời rạc (DFT) chuyển đổi tín hiệu từ miền thời gian sang miền tần số, giúp phân tích thành phần tần số của tín hiệu Thuật toán biến đổi Fourier nhanh (FFT) tối ưu hóa quá trình tính toán DFT, giảm đáng kể thời gian xử lý Trong khi độ phức tạp của thuật toán DFT là O(N²) cho tập hợp N điểm, thì FFT sử dụng thuật toán với độ phức tạp là O(N log₂ N), mang lại tốc độ xử lý vượt trội cho các ứng dụng phân tích tín hiệu.

Trong Matlab, lệnh FFT được sử dụng để phân tích phổ tín hiệu, trong đó mỗi mẫu phức tượng trưng cho cường độ và pha của tần số tương ứng, nhưng trong bài toán của chúng ta, các pha có thể bỏ qua để giảm độ phức tạp Để ước lượng nhịp tim liên tục, quá trình FFT cùng với hai bước phát hiện đỉnh và làm mịn được thực hiện lặp lại sau mỗi 0.5 giây, dựa trên một cửa sổ gồm 6 giây mẫu tín hiệu cuối cùng Cửa sổ trượt này di chuyển qua tín hiệu để liên tục cập nhật ước lượng, giúp nâng cao độ chính xác Độ dài của cửa sổ 6 giây không phải là ngẫu nhiên, vì nó ảnh hưởng trực tiếp đến độ phân giải tần số và độ chính xác của kết quả ước lượng, do FFT của tín hiệu mẫu N lần tại tần số lấy mẫu Fs cho ra N bin, mỗi bin bao phủ băng thông Fs, khiến khoảng cách tần số giữa hai bin liên tiếp là Fs/N.

N Đây là độ phân giải tần số (Fr) Tần số lấy mẫu có thể được coi là số lượng của sổ lấy mẫu chia cho tổng thời gian cần lấy mẫu của chúng.

Trong đó: F r : độ phân giải tần số

N: số các cửa sổ lấy mẫu

T W : tổng thời gian cần lấy mẫu

Nguồn nhiễu gây ảnh hưởng đến kết quả

Một số nguyên nhân ảnh hưởng đến việc đo lường nhịp tim bao gồm:

- Tiếng ồn hình ảnh: bắt nguồn từ cảm biến của camera

Hành vi của người dùng ảnh hưởng đến chất lượng hình ảnh chụp từ camera điện thoại Đặc biệt, các biến thể áp lực của đầu ngón tay trên ống kính có thể gây nhiễu tín hiệu và làm giảm độ rõ nét của ảnh Nếu người dùng có bàn tay run rẩy hoặc không ổn định, khả năng giữ vững điện thoại khi chụp sẽ gặp khó khăn Do đó, tốt hơn nên sử dụng một ngón tay để điều khiển hoặc giữ điện thoại nhằm giảm thiểu nhiễu động và đảm bảo hình ảnh rõ nét hơn Việc kiểm soát hành vi của người dùng đóng vai trò quan trọng trong việc tối ưu hóa chất lượng ảnh chụp từ camera điện thoại di động.

Thay đổi ánh sáng có thể gây nhiễu trong hình ảnh do ngón tay được chiếu sáng từ phía sau, khiến các yếu tố như nguồn sáng hoặc phản chiếu ánh sáng trong cảnh thay đổi đột ngột Điều này làm giảm chất lượng và độ rõ nét của hình ảnh, vì vậy cần kiểm soát ánh sáng phù hợp để duy trì hình ảnh rõ ràng và ổn định Các kỹ thuật tối ưu về ánh sáng giúp giảm thiểu nhiễu và nâng cao chất lượng hình ảnh trong quá trình chụp.

TÌM HIỂU VỀ FIREBASE

Tìm hiểu về Firebase

Firebase là nền tảng di động do Google phát triển, cung cấp nhiều tính năng đa dạng dựa trên dịch vụ đám mây Nền tảng này cho phép người dùng lưu trữ và truy xuất dữ liệu dễ dàng từ bất kỳ thiết bị hoặc trình duyệt nào, giúp tối ưu hóa quản lý và trải nghiệm người dùng trên các ứng dụng di động.

Firebase là nền tảng xử lý yếu tố trực tuyến và hỗ trợ phát triển ứng dụng, cho phép bạn tập trung vào thiết kế giao diện người dùng và chức năng chính Với SDK duy nhất tích hợp các API dễ sử dụng và tương thích tốt với Android Studio, Firebase giúp đơn giản hóa quá trình phát triển Điều này loại bỏ nhu cầu tạo tập lệnh phía máy chủ bằng PHP hoặc MySQL, giúp tối ưu hóa quá trình xây dựng ứng dụng của bạn.

Firebase sử dụng cơ sở dữ liệu thời gian thực, giúp dữ liệu được đồng bộ hóa ngay lập tức trên tất cả người dùng Khác với lưu trữ dữ liệu trên thiết bị rồi gửi đi, Firebase mang lại lợi ích về khả năng cập nhật dữ liệu tức thì và liên tục Tuy nhiên, người dùng cần phải có kết nối internet để ứng dụng hoạt động hiệu quả, vì không thể đồng bộ dữ liệu khi không có kết nối.

Firebase Services được chia ra làm hai loại chính là Develop và Grow như hình dưới

By integrating multiple Firebase services within a single application, you can enhance functionality without usage limitations Commonly utilized services include Google AdWords for advertising, Real-Time Analytics for tracking user behavior, notification effectiveness tools to optimize communication, and deep link performance analysis to improve user engagement Leveraging these Firebase services together ensures a robust and scalable app experience while maintaining flexibility and efficiency.

Realtime Database

1 Giới thiệu về Realtime Database

Firebase Realtime Database là một cơ sở dữ liệu NoSQL dựa trên đám mây, cho phép lưu trữ và đồng bộ dữ liệu giữa người dùng theo thời gian thực Nhờ tính năng đồng bộ tức thì, Firebase Realtime Database giúp các ứng dụng trở nên linh hoạt hơn và nâng cao trải nghiệm người dùng một cách dễ dàng Đây là lựa chọn lý tưởng cho các dự án yêu cầu cập nhật dữ liệu liên tục mà không cần thực hiện các thao tác phức tạp.

Realtime Database thực chất là một đối tượng Json lớn mà các nhà phát triển có thể quản lý trong thời gian thực.

Hình 8 Một cây các giá trị được lưu trữ trong Realtime Database

Firebase Database cung cấp một API duy nhất, cho phép ứng dụng của bạn truy cập dữ liệu ở trạng thái hiện tại cũng như theo dõi mọi cập nhật thời gian thực Tính năng nổi bật của Realtime Database là hỗ trợ SDK cho cả mobile và web, giúp bạn xây dựng ứng dụng không cần máy chủ phức tạp Khi người dùng ngoại tuyến, SDK sẽ sử dụng bộ lưu trữ trên thiết bị để phục vụ và lưu trữ các thay đổi, và dữ liệu này sẽ tự động đồng bộ khi kết nối được khôi phục, đảm bảo dữ liệu luôn nhất quán và cập nhật liên tục.

2 Cách cài đặt Firebase Để có thể sử dụng Realtime Database cũng như các services khác của Firebase,điều đầu tiên cần làm đó chính là tạo một tài khoản Google Và sau đó bạn sẽ truy cập vào trang web firebase.google.com để bắt đầu sử dụng Dưới đây là màn hình sau khi đăng nhập tài khoản Google thành công.

Hình 9 minh họa giao diện bắt đầu sử dụng Firebase trong Android Studio, nơi bạn có thể quản lý tất cả các dự án trước đây hoặc thêm dự án mới dễ dàng Để thêm dự án mới, bạn cần tạo dự án trong Android Studio rồi truy cập vào Tools > Firebase để mở màn hình “Firebase Assistant” Từ đó, bạn có thể tích hợp Firebase vào dự án của mình một cách nhanh chóng và thuận tiện.

“Authentication”, chọn “Connect to Firebase” để kết nối đến Firebase của bạn.

Hình 10 hiển thị màn hình kết nối giữa Android Studio và Firebase Để hoàn tất quá trình, bạn chỉ cần đăng nhập vào tài khoản Firebase của mình Sau đó, truy cập lại trang web Firebase và mở dự án đã tạo để bắt đầu sử dụng các dịch vụ cho dự án của bạn.

Hình 11 Hình ảnh một dự án trong Firebase

Bạn có thể dễ dàng cài đặt và sử dụng dịch vụ mong muốn bằng cách chọn các mục phù hợp trên thanh menu bên trái của trang web Điều này giúp tối ưu trải nghiệm người dùng và tiết kiệm thời gian khi truy cập các chức năng cần thiết Tùy thuộc vào dịch vụ bạn cần, giao diện thân thiện và dễ thao tác đảm bảo quá trình thiết lập diễn ra nhanh chóng và thuận tiện.

3 Cách sử dụng Realtime Database trong Android Studio

Sau khi truy cập vào dự án trong Firebase, bạn chọn mục Database và nhấn nút Create database để tạo cơ sở dữ liệu cho dự án của bạn.

Hình 12 Hình ảnh mục Realtime Database trong Firebase

Bạn có thể thêm dữ liệu cho dự án một cách dễ dàng bằng cách sử dụng giao diện người dùng hoặc tải lên tệp JSON Việc này giúp quá trình cập nhật dữ liệu trở nên nhanh chóng và thuận tiện hơn, phù hợp với các dự án cần quản lý dữ liệu linh hoạt Hướng dẫn này hỗ trợ người dùng mở rộng dự án dựa trên các dữ liệu đã có sẵn dưới định dạng JSON, nâng cao hiệu quả và tiết kiệm thời gian khi quản lý dữ liệu lớn.

Hình 13 Màn hình giao diện để thêm dữ liệu vào cơ sở dữ liệu

Firebase hỗ trợ xử lý dữ liệu ngoại tuyến bằng cách tự động lưu trữ dữ liệu khi không có kết nối internet Để kích hoạt chức năng này, bạn cần sử dụng câu lệnh phù hợp, đảm bảo ứng dụng của bạn luôn hoạt động một cách liền mạch bất kể trạng thái kết nối mạng Việc này giúp cải thiện trải nghiệm người dùng và đảm bảo dữ liệu không bị mất khi mất kết nối internet đột ngột.

To perform any operations on the Firebase Realtime Database, it is essential to first reference the database instance, which is achieved by initializing a DatabaseReference object The following code snippet demonstrates how to reference the root node of the JSON database: "mDatabase = FirebaseDatabase.getInstance().getReference();" Additionally, enabling data persistence with "FirebaseDatabase.getInstance().setPersistenceEnabled(true);" ensures data remains available offline, providing a seamless user experience Once the reference is set, you can navigate through child nodes using their specific names to read or write data efficiently.

Bạn có thể sử dụng phương thức setValue() để thêm dữ liệu vào trên đường dẫn tham chiếu cơ sở dữ liệu

DatabaseReference mRef = mDatabase.getReference("copyright"); mRef.setValue("©2016 androidhive All rights Reserved");

Realtime database cho phép lưu trữ nhiều loại dữ liệu đa dạng như String, Long, Double, Boolean, Map và List Bạn cũng có thể sử dụng các “custom java object” để lưu trữ dữ liệu phức tạp một cách linh hoạt Dưới đây là ví dụ mã code minh họa cách thêm một “custom java object” làm dữ liệu trong Realtime database.

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("users");// Creating new user node, which returns the unique key value

// new user node would be /users/$userid/

String userId = mDatabase.push().getKey();

User user = new User("Ravi Tamada", "ravi@androidhive.info");

// pushing user to 'users' node using the userId mDatabase.child(userId).setValue(user);

Sau khi chạy đoạn code trên, cơ sở dữ liệu của bạn sẽ có giá trị như sau:

Để đọc dữ liệu trong Firebase Realtime Database, bạn cần đính kèm một đối tượng ValueEventListener() vào tham chiếu của cơ sở dữ liệu Sự kiện này sẽ tự động kích hoạt mỗi khi có thay đổi dữ liệu theo thời gian thực, giúp bạn cập nhật dữ liệu một cách nhanh chóng và chính xác Trong hàm onDataChange(), bạn có thể thực hiện các thao tác xử lý dữ liệu mới theo nhu cầu Ví dụ: mDatabase.child(userId).addValueEventListener(new ValueEventListener() {…}.

@Override public void onDataChange(DataSnapshot dataSnapshot) {

User user = dataSnapshot.getValue(User.class);

Log.d(TAG, "User name: " + user.getName() + ", email " + user.getEmail());

@Override public void onCancelled(DatabaseError error) {

Log.w(TAG, "Failed to read value.", error.toException());

Bạn có thể sử dụng hàm setValue() để thay đổi dữ liệu trong Firebase Realtime Database Ngoài ra, hàm updateChildren() cho phép cập nhật toàn bộ node mà không ảnh hưởng đến các node con khác, giúp quản lý dữ liệu hiệu quả hơn Việc lựa chọn giữa hai phương pháp này phụ thuộc vào mục đích cập nhật dữ liệu của bạn để đảm bảo tính toàn vẹn của dữ liệu.

String newEmail = 'androidhive@gmail.com'; mDatabase.child(userId).child("email").setValue(newEmail);

Bạn có thể xóa dữ liệu hàng loạt trong Google Sheets bằng hai cách Phương pháp đầu tiên là sử dụng hàm removeValue() để xóa dữ liệu một cách dễ dàng và nhanh chóng Phương pháp thứ hai là tái sử dụng hàm setValue() với giá trị là null để xóa dữ liệu một cách linh hoạt Cả hai phương pháp đều giúp bạn quản lý dữ liệu hiệu quả và tối ưu hóa công việc xử lý dữ liệu.

 Quyền sử dụng và bảo mật

Firebase cho phép xác định quyền truy cập của người dùng đối với dữ liệu, bao gồm quyền đọc và ghi Các quy tắc bảo mật này được kiểm tra trước khi thực hiện bất kỳ thao tác nào liên quan đến dữ liệu, đảm bảo an toàn và kiểm soát truy cập hiệu quả Ngoài ra, Firebase còn hỗ trợ xác thực dữ liệu nhập vào để đảm bảo tính hợp lệ và đúng định dạng, nâng cao tính toàn vẹn của hệ thống.

".validate": "newData.isString() && newData.val().length < 50"

".validate": "newData.isString() && newData.val().matches(/^[A-Z0-9._%+-] +@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)"

Lý do sử dụng Firebase để giải quyết bài toán

Ứng dụng của chúng tôi cung cấp chức năng lưu trữ các chỉ số sức khỏe của người dùng để theo dõi và quản lý sức khỏe hiệu quả Tuy nhiên, lưu trữ dữ liệu ngoại tuyến dễ gặp phải các vấn đề về rò rỉ dữ liệu và mất dữ liệu do người dùng vô tình gây ra Vì vậy, chúng tôi đã tích hợp Firebase Realtime Database để cải thiện khả năng lưu trữ dữ liệu; giải pháp này không chỉ hỗ trợ lưu trữ trực tuyến mà còn cho phép lưu trữ ngoại tuyến và đồng bộ dữ liệu tự động khi có kết nối mạng Sử dụng Firebase như một giải pháp thay thế đáng tin cậy giúp nâng cao tính bảo mật và độ tin cậy của hệ thống lưu trữ dữ liệu sức khỏe người dùng.

PHÂN TÍCH THIẾT KẾ VÀ CÀI ĐẶT HỆ THỐNG

Phân tích chức năng hệ thống

Hình 14 Biểu đồ Use case tổng quan của Hệ thống ứng dụng a Biểu đồ Use case cho chức năng Đo nhịp tim

Hình 15 Biểu đồ Use case cho chức năng Đo nhịp tim

Mô tả chức năng đo nhịp tim bằng camera

Name Đo nhịp tim bằng camera

Actor User (Người sử dụng ứng dụng)

Description Cho phép người dùng đo nhịp tim bằng camera của thiết bị Normal Flow 1 Người dùng nhấn chức năng đo nhịp tim bằng camera

2 Người dùng nhấn màn hình để bắt đầu đo

3 Người dùng đặt tay lên camera của thiết bị

4 Hệ thống xử lý hình ảnh từ camera a Kiểm tra người dùng có đang đặt tay lên camera hay không

5 Đưa ra kết quả đo nhịp tim Alternative

1 Người dùng không đặt tay lên camera: báo lỗi cho người dùng.

Bảng 1 Bảng mô tả biểu đồ Usecase cho chức năng Đo nhịp tim bằng camera

Mô tả chức năng nhập giá trị nhịp tim

Name Nhập giá trị nhịp tim

Actor User (Người sử dụng ứng dụng)

Description Cho phép người nhập giá trị nhịp tim

Normal Flow 1 Người dùng nhấn chức năng nhập giá trị nhịp tim

2 Người dùng chọn giá trị trên thang đo hiển thị

3 Người dùng nhấn nút xác nhận

4 Hệ thống đưa ra kết quả nhập thành công

Bảng 2 Bảng mô tả biểu đồ Usecase cho chức năng Nhập giá trị nhịp tim b Biểu đồ Use case cho chức năng Quản lý dữ liệu đo

Hình 16 Biểu đồ Use case cho chức năng Quản lý dữ liệu đo

Mô tả chức năng xem thông tin dữ liệu đo

Name Xem thông tin dữ liệu đo

Actor User (Người sử dụng ứng dụng)

Description Cho phép người dùng xem thông tin các giá trị đã đo

Normal Flow 1 Người dùng chọn chức năng xem thông tin dữ liệu đo

2 Hệ thống hiển thị danh sách dữ liệu mới nhất trong ngày hiện tại

3 Người dùng chọn ngày cần xem

4 Hệ thống hiển thị danh sách dữ liệu mới nhất trong ngày được chọn

5 Người dùng chọn một loại dữ liệu trong danh sách

6 Người dùng chọn khoảng thời gian hiển thị: ngày, tháng năm

7 Hệ thống hiển thị các biểu đồ thống kê ngày, tháng, năm của dữ liệu tương ứng

Bảng 3 Bảng mô tả biểu đồ Usecase cho chức năng Xem thông tin dữ liệu đo

Mô tả chức năng thêm dữ liệu đo

Name Thêm dữ liệu đo

Actor User (Người sử dụng ứng dụng)

Description Cho phép người dùng lưu trữ thêm các dữ liệu đo

Normal Flow 1 Người dùng chọn loại dữ liệu muốn thêm

2 Người dùng nhấn chức năng thêm dữ

3 Người dùng nhập giá trị của loại dữ liệu

4 Người dùng nhấn xác nhận lưu thông tin

5 Hệ thống kiểm tra thông tin đã nhập a Kiểm tra định dạng dữ liệu đã nhập

6 Đưa ra thông báo thêm dữ liệu thành công Alternative

1 Thông tin nhập không chính xác: báo lỗi cho người dùng.

Bảng 4 Bảng mô tả biểu đồ Usecase cho chức năng Thêm dữ liệu đo c Mô tả chức năng Xem bài tập bổ trợ

Name Xem bài tập bổ trợ

Actor User (Người sử dụng ứng dụng)

Description Cho phép người dùng xem các bài tập bổ trợ và tập theo

Normal Flow 1 Người dùng chọn chức năng Tập luyện

2 Hệ thống hiển thị danh sách các bài tập luyện bổ trợ

3 Người dùng chọn bài tập muốn xem

4 Hệ thống hiển thị từng phần của bài tập theo thời gian

5 Người dùng chọn chức năng phụ

6 Người dùng chọn bật/ tắt âm thanh bài tập

7 Hệ thống kiểm tra trạng thái âm thanh

8 Người dùng chạm vào màn hình bài tập

9 Hệ thống kiểm tra trạng thái bài tập a Bài tập đang được diễn ra hay không

10 Người dùng chuyển phần tập

11 Hệ thống hiển thị phần được chuyển Alternative

1 Âm thanh đang tắt: Hệ thống bật âm thanh

2 Âm thanh đang bật: Hệ thống tắt âm thanh

3 Bài tập đang hiển thị: Tạm dừng bài tập, hiển thị nút chuyển phần.

4 Bài tập đang tạm dừng: Tiếp tục hiển thị phần tập, tắt hiển thị nút chuyển phần.

Bảng 5 Bảng mô tả biểu đồ Usecase cho chức năng Xem bài tập bổ trợ d Mô tả chức năng Đăng nhập

Actor User (Người sử dụng ứng dụng)

Description Cho phép người dùng đăng nhập vào ứng dụng

Normal Flow 1 Người dùng nhập username, password

2 Hệ thống kiểm tra tính hợp lệ của username, password a username và password có null không b username có tồn tại hay không c password có chính xác hay không

3 Hệ thống thông báo đăng nhập thành công

1 username hoặc password bị null: Đưa ra thông báo và yêu cầu nhập lại.

2 username không tồn tại trong cơ sở dữ liệu: Đưa ra thông báo username không chính xác.

3 password sai: Đưa ra thông báo password không chính xác.

Bảng 6 Bảng mô tả biểu đồ Usecase cho chức năng Đăng nhập e Mô tả chức năng Đăng kí

Actor User (Người sử dụng ứng dụng)

Description Cho phép người dùng đăng kí tài khoản để truy cập ứng dụng Normal Flow 1 Người dùng nhập thông tin tài khoản

2 Hệ thống kiểm tra tính hợp lệ của thông tin người dùng nhập a Thông tin có null không b username đã tồn tại hay không c password có đúng định dạng không d password và confirm password có trùng hay không

5 Hệ thống thông báo đăng kí thành công

1 Một trong số thông tin nhập vào bị null: Đưa ra thông báo và yêu cầu nhập lại.

2 username đã tồn tại trong cơ sở dữ liệu: Đưa ra thông báo username đã tồn tại và yêu cầu nhập lại.

3 password sai định dạng: Đưa ra thông báo và yêu cầu nhập lại

4 password và confirm password không giống nhau: Đưa ra thông báo và yêu cầu nhập lại

Bảng 7 Bảng mô tả biểu đồ Usecase cho chức năng Đăng nhập f Mô tả chức năng Quản lý tài khoản

Hình 17 Biểu đồ Use case cho chức năng Quản lý tài khoản

Mô tả chức năng Xem thông tin tài khoản

Name Xem thông tin tài khoản

Actor User (Người sử dụng ứng dụng)

Description Cho phép người dùng xem thông tin tài khoản của mình

Normal Flow 1 Người dùng chọn chức năng xem thông tin tài khoản

2 Hệ thống hiển thị thông tin tài khoản

Bảng 8 Bảng mô tả biểu đồ Usecase cho chức năng Xem thông tin tài khoản

Mô tả chức năng Đổi mật khẩu

Actor User (Người sử dụng ứng dụng)

Description Cho phép người dùng đổi mật khẩu đăng nhập tài khoản

Normal Flow 1 Người dùng chọn chức năng đổi mật khẩu

2 Chuyển sang trang ChangePass Activity

3 Người dùng nhập mật khẩu cũ và mật khẩu mới

4 Hệ thống kiểm tra nội dung nhập a Nội dung nhập có null hay không b mật khẩu cũ có chính xác hay không c Mật khẩu mới có trùng với mật khẩu cũ hay không d Mật khẩu mới có đúng định dạng hay không e Newpass và confirm new pass có trùng hay không

5 Hệ thống đưa ra thông báo đổi thành công

6 Chuyển sang trang LoginActivity Alternative

1 Một trong các nội dung nhập bị null: Đưa ra thông báo và yêu cầu nhập lại

2 Mật khẩu cũ không chính xác: Đưa ra thông báo và yêu cầu nhập lại

3 Mật khẩu mới trùng mật khẩu cũ: Đưa ra thông báo và yêu cầu nhập lại

4 Mật khẩu mới sai định dạng: Đưa ra thông báo và yêu cầu nhập lại

5 Newpass và confirm newpass không giống nhau: Đưa ra thông báo và yêu cầu nhập lại

Bảng 9 Bảng mô tả biểu đồ Usecase cho chức năng Xem thông tin tài khoản

2 Biểu đồ Sequence a Chức năng Đo nhịp tim bằng camera

Hình 18 Biểu đồ Sequence cho chức năng Đo nhịp tim bằng camera

 Mô tả chức năng Đo nhịp tim bằng camera

Bước Nội dung message Mô tả

Hàm HeartRateCamera() được sử dụng để đo nhịp tim bằng camera mà không yêu cầu tham số hay kiểu trả về, giúp ứng dụng theo dõi sức khỏe dễ dàng hơn Hàm Measure() thực hiện chức năng chuyển đổi trang giao diện, không cần tham số hay kiểu trả về, tối ưu hóa trải nghiệm người dùng Trong đó, hàm Redirect() được gọi để chuyển hướng đến màn hình đo nhịp tim, đảm bảo quá trình đo diễn ra m smoothly và chính xác.

Hàm chuyển trang, tham số là form HeartRate Activity, không có kiểu trả về

2 MeasureCamera() Hàm yêu cầu đo nhịp tim, không có tham số, không có kiểu trả về 2.1 loadFragment(RateCamera

Hàm yêu cầu hiển thị giao diện đo nhịp tim, tham số là tên giao diện

RateCamera, không có kiểu trả về 2.1.1 loadFragment(RateCamera

Hàm hiển thị giao diện đo nhịp tim, tham số là tên giao diện RateCamera, không có kiểu trả về

3 Measure() Hàm yêu cầu bắt đầu đo nhịp tim

3.1 StartMeasure() Hàm xác nhận bắt đầu thực thi đo nhịp tim, không có tham số, không có kiểu trả về

4 Images Dữ liệu hình ảnh được chụp từ camera:

Images 4.1 Measure(Images) Hàm đo nhịp tim, tham số là Images, không giá trị trả về.

4.1.1 Check(Images) Hàm kiểu tra người dùng đang đo hay không, tham số là Images, trả về Bool 4.1.2 Alert("Người dùng chưa đặt tay")

Thông báo người dùng chưa đặt tay vào camera

4.1.3 Processing(Images) Hàm tính toán giá trị nhịp tim, tham số là

The process begins with capturing images that return measured values as rates The SetRate(rate) function saves the measured rate into the database, with the parameter being the rate value and no return type The DisplayRate(rate) function then displays the measurement results, taking the rate as a parameter and returning no value Additionally, the Redirect(HeartRateResult) function is used to navigate to the heart rate result display or processing page.

Hàm chuyển trang, tham số là form HeartRateResult Activity, không có kiểu trả về

4.1.6.1 DisplayRate(rate) Hàm hiển thị kết quả sau khi đo, tham số là rate, không có kiểu trả về

Bảng 10 Bảng mô tả biểu đồ Sequence cho chức năng Đo nhịp tim bằng camera b Chức năng Nhập giá trị nhịp tim

Hình 19 Biểu đồ Sequence cho chức năng Nhập giá trị nhịp tim

 Mô tả chức năng Nhập giá trị nhịp tim

Bước Nội dung message Mô tả

1 InputValue() Hàm yêu cầu nhập giá trị nhịp tim, không tham số, không có kiểu trả về.

1.1 InputValue() Hàm xử lý yêu cầu nhập giá trị nhịp tim, không tham số, không có kiểu trả về.

1.1.1 loadFragments(InputFragment) Hàm yêu cầu hiển thị giao diện đo nhịp tim, tham số là tên giao diện InputFragment, không có kiểu trả về

2 rate Rate: giá trị người dùng nhập

3 SaveValue() Hàm yêu cầu lưu giá trị rate được nhập, không tham số, không có kiểu trả về.

3.1 AddRate(rate) Hàm thực thi yêu cầu lưu giá trị được nhập, không tham số, không có kiểu trả về.

3.1.1 SetRate(rate) Hàm lưu trữ giá trị đo rate vào kho dữ liệu, tham số là rate, không có kiểu trả về

3.1.2 DisplayRate(rate) Hàm hiển thị kết quả nhập vào, tham số là rate, không có kiểu trả về 3.1.3 Redirect(HeartRateResult

Hàm chuyển trang, tham số là form HeartRateResult Activity, không có kiểu trả về

3.1.3.1 DisplayRate(rate) Hàm hiển thị kết quả nhập vào, tham số là rate, không có kiểu trả về

Bảng 11 Bảng mô tả biểu đồ Sequence cho chức năng Nhập giá trị nhịp tim c Chức năng Xem thông tin dữ liệu đo

Hình 20 Biểu đồ Sequence cho chức năng Xem thông tin dữ liệu đo

 Mô tả chức năng Xem thông tin dữ liệu đo

Bước Nội dung message Mô tả

The DataRate() function allows users to view the entered data without any parameters or return type It handles requests to display the inputted data efficiently Additionally, the Redirect(DataRateActivity) function facilitates page navigation by accepting a form as its parameter, ensuring smooth transitions between different screens.

DataRateActivity, không có kiểu trả về 1.1.1.1 DisplayData() Hàm yêu cầu lấy dữ liệu hiển thị, không tham số, không có kiểu trả về.

Hàm GetCurrentDate() không có tham số và trả về ngày hiện tại, giúp lấy dữ liệu thời gian chính xác nhất Hàm getRate(currentDate) sử dụng ngày hiện tại làm tham số để lấy danh sách dữ liệu tỷ lệ theo ngày, trả về danh sách DataRate phù hợp với thời điểm cần thiết.

1.1.1.1.3 List data rate Thông tin mỗi data rate bao gồm: ID, nameRate, rate, dateRate

2.1 DisplayData(date) Hàm yêu cầu hiển thị dữ liệu theo ngày chọn, tham số là date, không có kiểu trả về

2.1.1 getRate(date) Hàm lấy danh sách dữ liệu theo ngày, tham số là date, trả về list DataRate 2.1.2 List data rate Thông tin mỗi data rate bao gồm: ID, nameRate, rate, dateRate

3 ShowStatistic(nameRate) Hàm yêu cầu hiển thị thông số biểu đồ theo loại dữ liệu, tham số truyền vào là nameRate, không có kiểu trả về

3.1 ShowStatistic(nameRate) Hàm xử lý yêu cầu hiển thị thông số biểu đồ theo loại dữ liệu, tham số truyền vào là nameRate, không có kiểu trả về 3.1.1 Redirect(StatisticActivity) Hàm chuyển trang, tham số là form

StatisticActivity, không có kiểu trả về 3.1.1.1 ShowStatistic(date, nameRate)

Hàm xử lý yêu cầu hiển thị thông số biểu đồ theo loại dữ liệu trong một ngày nhận vào các tham số `nameRate` và `date`, giúp hiển thị thông tin chính xác dựa trên các yếu tố này Hàm không có kiểu trả về, tập trung vào việc xử lý và hiển thị dữ liệu trực tiếp trên biểu đồ Việc truyền đúng `nameRate` và `date` đảm bảo kết quả hiển thị phù hợp, tối ưu hóa trải nghiệm người dùng trong việc phân tích dữ liệu theo thời gian.

Hàm getRate(nameRate, date) giúp lấy danh sách dữ liệu theo ngày và loại dữ liệu, với tham số là tên loại dữ liệu (nameRate) và ngày (date), trả về danh sách các đối tượng DataRate Mỗi DataRate bao gồm các thông tin quan trọng như ID, tên loại dữ liệu (nameRate), tỷ lệ (rate) và ngày (dateRate), giúp người dùng dễ dàng truy xuất và xử lý dữ liệu liên quan đến tỷ lệ theo thời gian.

4.1 CheckType(type) Hàm kiểm tra type người dùng chọn là gì, tham số là type, không có kiểu trả về 4.2 ShowStatistic(date, nameRate)

Hàm xử lý hiển thị thông số biểu đồ theo loại dữ liệu trong một ngày nhận vào các tham số nameRate và date mà không có kiểu trả về Hàm getRate(nameRate, date) giúp lấy danh sách dữ liệu theo ngày và loại dữ liệu, trả về danh sách DataRate bao gồm các thông tin như ID, tên loại dữ liệu, tỷ lệ, và ngày cập nhật Thông tin về danh sách DataRate cung cấp các dữ liệu cần thiết để hiển thị biểu đồ chính xác và rõ ràng Hàm ShowStatisticm(month, nameRate) cho phép hiển thị thống kê trong tháng dựa trên loại dữ liệu đã chọn, giúp phân tích dữ liệu một cách tổng thể và hiệu quả.

Hàm xử lý hiển thị thông số biểu đồ theo loại dữ liệu trong một tháng, tham số truyền vào là nameRate và month, không có kiểu trả về

4.3.1 getRate(nameRate,month) Hàm lấy danh sách dữ liệu theo tháng và tên loại dữ liệu, tham số là month và nameRate, trả về list DataRate

4.3.2 List data rate Thông tin mỗi data rate bao gồm: ID, nameRate, rate, dateRate 4.4 ShowStatisticy(year, nameRate)

Hàm xử lý hiển thị thông số biểu đồ theo loại dữ liệu trong một năm, tham số truyền vào là nameRate và year, không có kiểu trả về.

4.4.1 getRate(nameRate,year) Hàm lấy danh sách dữ liệu theo năm và tên loại dữ liệu, tham số là year và nameRate, trả về list DataRate 4.4.2 List data rate Thông tin mỗi data rate bao gồm: ID, nameRate, rate, dateRate

Bảng 12 Bảng mô tả biểu đồ Sequence cho chức năng Xem thông tin dữ liệu đo d Chức năng Thêm dữ liệu đo

Hình 21 Biểu đồ Sequence cho chức năng Thêm dữ liệu đo

 Mô tả chức năng Thêm dữ liệu đo

Bước Nội dung message Mô tả

Hàm `AddRate(nameRate)` được sử dụng để thêm dữ liệu cho loại `nameRate` và không có kiểu trả về Hàm này nhận vào tham số là tên giao diện `nameRate` Ngoài ra, hàm `DisplayPopup(Add)` dùng để hiển thị popup nhập dữ liệu, với tham số truyền vào là tên popup là `Add`, và cũng không có kiểu trả về.

3 Add() Hàm yêu cầu lưu giá trị rate được nhập, không tham số, không có kiểu trả về.

3.1 AddRates(rate) Hàm thực thi yêu cầu lưu giá trị được nhập, không tham số, không có kiểu trả về.

3.1.1 Validation(rate) Hàm kiểm tra rate có là số nguyên không âm hay không, tham số là rate, kiểu trả về là Bool 3.1.2 SetRate(rate, nameRate) Hàm lưu trữ giá trị đo rate của loại nameRate vào kho dữ liệu, tham số là rate và nameRate, không có kiểu trả về3.1.3 Alert("Thêm thành công") Thông báo người dùng thêm dữ liệu thành công 3.1.4 Alert("Sai định dạng Mời nhập lại")

Thông báo sai định dang, yêu cầu nhập lại

Bảng 13 Bảng mô tả biểu đồ Sequence cho chức năng Thêm dữ liệu đo e Chức năng Xem bài tập bổ trợ

Hình 22 Biểu đồ Sequence cho chức năng Xem bài tập bổ trợ

 Mô tả chức năng Xem bài tập bổ trợ

Bước Nội dung message Mô tả

1 Exercise() Hàm yêu cầu xem bài tập bổ trợ, không tham số, không có kiểu trả về.

1.1 Exercise() Hàm xử lý yêu cầu xem bài tập bổ trợ, không tham số, không có kiểu trả về.

1.1.1 Redirect(Exercise Activity) Hàm chuyển trang, tham số là form Exercise Activity, không có kiểu trả về

1.1.1.1 DisplayData() Hàm yêu cầu lấy dữ liệu hiển thị, không tham số, không có kiểu trả về.

1.1.1.1.2 getListExercise() Hàm lấy danh sách các exercise, không tham số, trả về list Exercise 1.1.1.1.3 List exercise Thông tin mỗi exercise bao gồm:

ID, nameExercise, description, ImageName, quantity, desImage, numsecond, iconDes

2 DetailExercise(nameExercise) Hàm yêu cầu xem bài tập bổ trợ, tham số là nameExercise, không có kiểu trả về

2.1 DetailExercise(nameExercise) Hàm xử lý yêu cầu hiển thị dữ liệu theo ngày chọn, tham số là nameExercise, không có kiểu trả về 2.1.1 Redirect(DetailExerciseActivity) Hàm chuyển trang, tham số là form DetailExerciseActivity, không có kiểu trả về 2.1.1.1 DisplayData(nameExercise) Hàm yêu cầu lấy dữ liệu hiển thị theo bài tập, tham số là nameExercise, không có kiểu trả về.

2.1.1.1.1 getExercise(nameExercise) Hàm lấy danh sách các phần tập, tham số là nameExercise, trả về list Exercise

2.1.1.1.2 List exercise Thông tin mỗi exercise bao gồm:

ID, nameExercise, description, ImageName, quantity, desImage, numsecond

2.1.1.1.3 DisplayPostion() Hiển thị phần tập đầu trong bài tập, không có tham số, không kiểu trả về

2.1.1.1.4 Run() Hàm hiển thị các phần tập, không tham số truyền vào, không kiểu trả về

3 Sound() Hàm yêu cầu (tắt/ bật âm thanh), không tham số, , không kiểu trả về

3.1 Sound() Hàm xử lý yêu cầu (tắt/ bật âm thanh), không tham số, , không kiểu trả về

Xây dựng cơ sở dữ liệu

Ứng dụng của bạn sử dụng Firebase Realtime Database làm cơ sở dữ liệu chính, thay vì sử dụng các bảng như trong MySQL, hệ thống này lưu trữ dữ liệu dưới dạng các tệp JSON linh hoạt Firebase Realtime Database giúp xây dựng các ứng dụng thời gian thực, tối ưu hóa khả năng mở rộng và khả năng đồng bộ dữ liệu nhanh chóng Thay vì cấu trúc bảng truyền thống, dữ liệu được tổ chức dưới dạng cấu trúc cây JSON, giúp dễ dàng quản lý và truy cập dữ liệu theo cách tối ưu cho các ứng dụng di động và web hiện đại Việc sử dụng Firebase Realtime Database mang lại khả năng thực thi nhanh, bảo mật cao và khả năng cập nhật dữ liệu tức thì cho người dùng.

Do vậy, để thay thế, tôi sẽ đưa ra các Object được lưu trữ trong Realtime Database.

Kết quả đạt được

1 Giao diện màn hình Login Activity

Hình 39 Giao diện màn hình Log in Activity

2 Giao diện màn hình SignUpActivity

Hình 40 Giao diện màn hình Sign up Activity

3 Giao diện màn hình MainActivity

Hình 41 Giao diện màn hình Main Activity

4 Giao diện màn hình Đo nhịp tim bằng camera

Hình 42 Giao diện màn hình giới thiệu cách đo nhịp tim bằng camera

Hình 43 Giao diện màn hình Đo nhịp tim bằng camera

5 Giao diện màn hình Nhập giá trị nhịp tim

Hình 44 Giao diện màn hình Nhập giá trị đo nhịp tim

6 Giao diện màn hình Hiển thị kết quả đo

Hình 45 Giao diện màn hình Hiển thị kết quả đo nhịp tim

7 Giao diện màn hình Quản lý dữ liệu đo

Hình 46 Giao diện màn hình Danh sách các dữ liệu trong ngày

Hình 47 Giao diện màn hình thống kê dữ liệu

8 Giao diện màn hình Xem bài tập bổ trợ

Hình 48 Giao diện màn hình Danh sách các bài tập bổ trợ

Hình 49 Giao diện màn hình Hiển thị bài tập bổ trợ

Hình 50 Giao diện màn hình Tạm dừng hiển thị bài tập

9 Giao diện màn hình Xem thông tin tài khoản

Hình 51 Giao diện màn hình Xem thông tin tài khoản

10 Giao diện màn hình Thay đổi mật khẩu

Hình 52 Giao diện màn hình Xem thông tin tài khoản

Ngày đăng: 18/11/2022, 16:29

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w