Android có một cộng đồng những nhà phát triển rất lớn viết các ứng dụng cho hệ điều hành của mình, điều này khiến Android trở thành hệ điều hành di động có môi trường phát triển cực kì r
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
Tel (84-511) 736 949, Fax (84-511) 842 771 Website: itf.ud.edu.vn, E-mail: cntt@edu.ud.vn
LUẬN VĂN TỐT NGHIỆP KỸ SƯ NGÀNH CÔNG NGHỆ THÔNG TIN
MÃ NGÀNH : 05115
ĐỀ TÀI : XÂY DỰNG HỆ THỐNG TRỢ GIÚP ẨM THỰC
TRÊN ĐIỆN THOẠI DI ĐỘNG
Mã số : 09T3 - 121 Ngày bảo vệ : 18-20/06/2014
SINH VIÊN : NGUYỄN THỦY LỘC
ĐÀ NẴNG, 06/2014
Trang 2LỜI CẢM ƠN
Em xin chân thành cám ơn thầy ThS Võ Đức Hoàng đã tận tình hướng dẫn và giúp đỡ em trong suốt quá trình thực hiện đồ án tốt nghiệp này Em cũng xin gởi lời cám ơn chân thành đến toàn thể quý thầy cô trường Đại học Bách khoa Đà Nẵng, đặc biệt là các thầy cô trong khoa Công nghệ Thông Tin trường Đại Học Bách Khoa – Đại Học Đà Nẵng đã tận tình giảng dạy, truyền đạt những kiến thức, kinh nghiệm quý báu trong suốt quá trình học tập vừa qua
Trong suốt quá trình làm đồ án tốt nghiệp chắc chắn không tránh khỏi những thiếu sót, em rất mong sự giúp đỡ và góp ý của quý thầy cô để em hoàn thiện hơn đề tài của mình
Một lần nữa, em xin chân thành cám ơn
Đà Nẵng, ngày 30 tháng 05 năm 2014
Sinh viên, Nguyễn Thủy Lộc – 09T3
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan :
- Những nội dung trong luận văn này là do tôi thực hiện dưới sự
hướng dẫn trực tiếp của thầy ThS Võ Đức Hoàng
- Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên
tác giả, tên công trình, thời gian, địa điểm công bố
- Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi
xin chịu hoàn toàn trách nhiệm
Sinh viên, Nguyễn Thủy Lộc – 09T3
Trang 4………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
……….………
……….………
……….………
……….………
……….………
……….………
……….………
Trang 5NHẬN XÉT CỦA HỘI ĐỒNG PHẢN BIỆN
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 6MỤC LỤC
MỞ ĐẦU 1
1.1 GIỚITHIỆU 1
1.1.1 Bối cảnh đề tài 1
1.1.2 Mục đích 1
1.1.3 Ý nghĩa 2
1.2 PHẠMVIĐỀTÀI 2
1.3 TRIỂNKHAIĐỀTÀI 2
1.3.1 Các bước thực hiện 2
1.3.2 Mục tiêu cần đạt được 3
1.4 KẾTQUẢDỰKIẾN 3
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 4
1.1 GIỚITHIỆUCÁCNỀNTẢNGDIĐỘNG 4
1.1.1 Ios 4
1.1.2 Android 5
1.1.3 Windowphone 5
1.1.4 BlackBerry 6
1.2 GIỚITHIỆUHỆĐIỀUHÀNHANDROID 6
1.2.1 Giới thiệu 6
1.2.2 Lịch sử phát triển 7
1.2.3 Kiến trúc của hệ điều hành Android 8
1.3 LẬPTRÌNHỨNGDỤNGTRONGANDROID 10
1.3.1 Công cụ hỗ trợ 10
1.3.2 Các thành phần chính trong android project 10
1.3.2.1 Các thành phần chính trong android 10
1.3.2.2 AndroidManifest 10
1.3.3 Activity 11
1.3.3.1 Các phương thức trong chu kỳ sống của một activity 12
1.3.4 Intent 13
1.3.4.1 Các thuộc tính của một đối tượng intent 14
1.3.4.2 Sử dụng Intent 14
1.3.5 Adapter trong andoid 15
1.3.6 Lưu trữ dữ liệu trong android 15
1.3.7 Giao diện trong android 15
1.3.7.1 View 15
1.3.7.2 ViewGroup 16
1.4 HỆQUẢNTRỊCƠSỞDỮLIỆUSQLITE 19
1.4.1 Giới thiệu 19
1.4.2 Đặc điểm 19
1.4.3 Phiên bản 20
1.5 WEB SERVICE 20
1.5.1 Giới thiệu 20
Trang 71.5.2 Đặc điểm webservice 20
1.5.2.1 Ưu điểm 21
1.5.2.2 Nhược điểm 22
1.6 RESTFULWEBSERVICE 22
1.6.1 Khái niệm 22
1.6.1.1 REST 22
1.6.1.2 Kiến trúc 22
1.6.1.3 RESTFul Web Service 23
1.6.1.4 Cơ chế hoạt động 23
1.6.1.5 Một số thành phần của RESTful Web Service 24
1.6.2 Json và Gson 25
1.6.2.1 Sơ lược về json 25
1.6.2.2 So sánh với XML 25
1.6.2.3 Sơ lược về Gson 27
1.7 JSPVÀSERVLET 28
1.7.1 JSP 28
1.7.2 SERVLET 28
1.7.3 MÔ HÌNH MVC TRONG JAVA WEB JSP SERVLET 29
1.7.3.1 Khái niệm cơ bản về mô hình MVC 29
1.7.3.2 Mô hình MVC trong ứng dụng web với JSP Servlet 29
CHƯƠNG 2 PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 30
2.1 PHÂNTÍCHYÊUCẦU 30
2.1.1 Mô tả bài toán 30
2.1.2 Phân tích hiện trạng ẩm thực Việt Nam 31
2.1.2.1 Giới thiệu sơ lược về ẩm thực Việt Nam 31
2.1.2.2 Đặc điểm 31
2.1.3 Phân tích yêu cầu bài toán 32
2.1.3.1 Yêu cầu chức năng 32
2.1.3.2 Yêu cầu phi chức năng 33
2.1.4 Phân tích tính khả thi 33
2.1.5 Công nghệ 33
2.2 PHÂNTÍCHVÀTHIẾTKẾHỆTHỐNG 34
2.2.1 Phân tích và thiết kế ứng dụng di động Android 34
2.2.1.1 Usecase 34
2.2.1.2 Biểu đồ hoạt động 42
2.2.1.3 Biểu đồ tuần tự 49
2.2.1.4 Biểu đồ lớp 54
2.2.1.5 Thiết kế cơ sở dữ liệu 54
2.2.2 Phân tích và thiết kế Web Server 58
2.2.2.1 Web admin 58
2.2.2.2 Sơ đồ lớp 65
2.2.2.3 Thiết kế cơ sở dữ liệu 65
CHƯƠNG 3 TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 67
3.1 KẾTQUẢ 67
3.1.1 Kết quả triển khai Web Service 67
Trang 83.1.2 Kết quả triển khai Web Admin 67
3.1.3 Kết quả triển khai ứng dụng trên di động 78
3.2 ĐÁNHGIÁ 85
3.2.1 Bảng đánh giá kết quả thực hiện 85
3.2.1.1 Ứng dụng trên điện thoại di động 85
3.2.1.2 Hệ thống Server 85
3.2.2 Những điều đạt được 85
3.2.2.1 Hệ thống Web server 86
3.2.2.2 Ứng dụng trên điện thoại di động 86
3.2.3 Những điều chưa đạt được 86
3.3 HƯỚNGPHÁTTRIỂN 86
TÀI LIỆU THAM KHẢO 87
TÓM TẮT LUẬN VĂN TỐT NGHIỆP 88
PHỤ LỤC 1
Trang 9DANH SÁCH HÌNH VẼ
Hình 1: Giới thiệu mobile 4
Hình 2: Giới thiệu android 6
Hình 3: Kiến trúc hệ điều hành android 8
Hình 4: Sơ đồ hoạt động activity trong android 11
Hình 5: Sơ đồ Intent 13
Hình 6: Sơ đồ giao diện trong android 16
Hình 7: Framelayout android 17
Hình 8: Relativelayout android 18
Hình 9; Tablelayout android 18
Hình 10: Quản trị SQLite 19
Hình 11: Kiến trúc REST 22
Hình 12: Cơ chế hoạt động của REST 23
Hình 13: Use case của ứng dụng android 34
Hình 14: Biểu đồ hoạt động xem văn hóa ẩm thực 42
Hình 15: Biểu đồ hoạt động cập nhật dữ liệu 42
Hình 16: Biểu đồ hoạt động tìm kiếm món ăn 43
Hình 17: Biểu đồ hoạt động gửip hản hồi cho từng món ăn 43
Hình 18: Biểu đồ hoạt động tạo ghi chú cho từng món ăn 44
Hình 19: Biểu đồ hoạt động chỉnh sửa ghi chú cho từng món ăn 44
Hình 20: Biểu đồ hoạt động chia sẻ món ăn trên facebook 45
Hình 21: Biểu đồ hoạt động xem danh sách món ăn 45
Hình 22: Biểu đồ hoạt động thêm món ăn yêu thích 46
Hình 23: Biểu đồ hoạt động xóa món ăn yêu thích 46
Hình 24: Biểu đồ hoạt động chỉnh sửa hẹn giờ 47
Hình 25: Biểu đồ hoạt động đặt giờ 47
Hình 26: Biểu đồ hoạt động xóa hẹn giờ 48
Hình 27: Biểu đồ hoạt động gửi phản hồi cho ứng dụng 48
Hình 28: Biểu đồ tuần tự xem văn hóa ẩm thực 49
Hình 29: Biểu đồ tuần tự cập nhật dữ liệu 49
Hình 30: Biểu đồ tuần tự tìm kiếm món ăn 49
Hình 31: Biểu đồ tuần tự xem danh sách món ăn 50
Hình 32: Biểu đồ tuần tự gửi phản hồi cho từng món ăn 50
Hình 33: Biểu đồ tuần tự tạo ghi chú cho từng món ăn 50
Hình 34: Biểu đồ tuần tự chỉnh sửa chi chú cho từng món ăn 51
Hình 35: Biểu đồ tuần tự chia sẻ món ăn trên facebook 51
Hình 36: Biểu đồ tuần tự thêm món ăn yêu thích 51
Hình 37: Biểu đồ tuần tự xem món ăn yêu thích 52
Hình 38: Biểu đồ tuần tự chỉnh sửa hẹn giờ 52
Hình 39: Biểu đồ tuần tự thêm hẹn giờ 52
Hình 40: Biểu đồ tuần tự xóa hẹn giờ 53
Hình 41: Biểu đồ tuần tự gửi phản hồi cho ứng dụng 53
Hình 42: Biểu đồ lớp 54
Hình 43: Biểu đồ lớp chi tiết 54
Hình 44: Quan hệ giữa các bảng trong cơ sở dữ liệu 55
Hình 45: Sơ đồ usecase web admin 58
Trang 10Hình 46: Biểu đồ hoạt động đăng nhập 61
Hình 47: Biểu đồ hoạt động xem dữ liệu 61
Hình 48: Biểu đồ hoạt động thêm dữ liệu 62
Hình 49: Biểu đồ hoạt động sửa dữ liệu 62
Hình 50: Biểu đồ hoạt động xóa dữ liệu 63
Hình 51: Biểu đồ tuần tự đăng nhập 63
Hình 52: Biểu đồ tuần tự xem dữ liệu 63
Hình 53: Biểu đồ tuần tự thêm dữ liệu 64
Hình 54: Biểu đồ tuần tự xóa dữ liệu 64
Hình 55: Biểu đồ tuần tự sửa dữ liệu 64
Hình 56: Sơ đồ lớp web admin 65
Hình 57: Sơ đồ lớp chi tiết web admin 65
Hình 58: Dữ liệu Json trả về từ Web Service 67
Hình 59: Đăng nhập 67
Hình 60: Quản lý món ăn 68
Hình 61: Thêm món ăn 68
Hình 62: Xem, sửa món ăn 69
Hình 63: Xóa món ăn 69
Hình 64: Quản lý loại món ăn 70
Hình 65: Thêm mới loại món ăn 70
Hình 66: Xem và sửa loại món ăn 71
Hình 67: Xóa loại món ăn 71
Hình 68: Quản lý vùng 72
Hình 69: Thêm mới vùng 72
Hình 70: Xem và sửa vùng 73
Hình 71: Quản lý xuất xứ 73
Hình 72: Thêm mới xuất xứ 74
Hình 73: Xem và sửa xuất xứ 74
Hình 74: Xóa xuất xứ 75
Hình 75: Quản lý nguyên liệu 75
Hình 76: Thêm mới nguyên liệu 76
Hình 77: Xem và sửa nguyên liệu 76
Hình 78: Xóa nguyên liệu 77
Hình 79: Quản lý bình luận 77
Hình 80: Màn hình main 78
Hình 81: Màn hình văn hóa ẩm thực 78
Hình 82: Màn hình dialog chọn vùng 79
Hình 83: Màn hình dialog chọn xuất xứ 79
Hình 84: Màn hình danh sách món ăn 80
Hình 85: Màn hình chi tiết món ăn 80
Hình 86: Màn hình chi tiết công thức món ăn 81
Hình 87: Màn hình ghi chú món ăn 81
Hình 88: Màn hình bình luận món ăn 82
Hình 89: Màn hình hẹn giờ nấu ăn 82
Hình 90: Màn hình danh sách yêu thích 83
Hình 91: Màn hình danh sách hẹn giờ 83
Trang 11DANH SÁCH BẢNG BIỂU
Bảng 1: Các thuộc tính của đối tượng intent 14
Bảng 2: Các hàm thực thi Activity 14
Bảng 3: Các method của HTTP được hỗ trợ 24
Bảng 4: Đối tượng Json 26
Bảng 5: Mảng Json 26
Bảng 6: Ví dụ sử dụng Gson 27
Bảng 7: Mô tả usecase xem văn hóa ẩm thực 34
Bảng 8: Mô tả usecase cập nhật dữ liệu 35
Bảng 9: Mô tả usecase tìm kiếm món ăn 35
Bảng 10: Mô tả usecase xem chi tiết món ăn 36
Bảng 11: Mô tả usecase gửi phản hồi cho từng món ăn 36
Bảng 12: Mô tả usecase tạo ghi chú cho món ăn 37
Bảng 13: Mô tả usecase chỉnh sửa ghi chú món ăn 37
Bảng 14: Mô tả usecase chia sẻ món ăn trên facebook 38
Bảng 15: Mô tả usecase xem danh sách món ăn 38
Bảng 16: Mô tả usecase thêm món ăn yêu thích 39
Bảng 17: Mô tả usecase xóa món ăn yêu thích 39
Bảng 18: Mô tả usecase chỉnh sửa hẹn giờ 40
Bảng 19: Mô tả usecase xóa hẹn giờ 40
Bảng 20: Mô tả usecase đặt giờ 41
Bảng 21: Mô tả usecase gửi phản hồi cho ứng dụng 41
Bảng 22: Bảng định mức 55
Bảng 23: Loại món ăn 56
Bảng 24: Bảng Vùng 56
Bảng 25: Xuất xứ 56
Bảng 26: Nguyên liệu 56
Bảng 27: Món ăn 57
Bảng 28: Món ăn Nguyên liệu 57
Bảng 29: Hẹn giờ 57
Bảng 30: Mô tả usecase đăng nhập 58
Bảng 31: Mô tả usecase thêm dữ liệu 59
Bảng 32: Mô tả usecase sửa dữ liệu 59
Bảng 33: Mô tả usecase xóa dữ liệu 60
Bảng 34: Mô tả usecase xem dữ liệu 60
Bảng 35: user 66
Bảng 36: RateAndBinhLuan 66
Bảng 37: Bảng đánh giá kết quả thục hiện trên điện thoại di động 85
Bảng 38: Bảng đánh giá kết quả thực hiện trên hệ thống server 85
Trang 12cụ như một cuốn sổ tay mini chỉ dẫn về nấu ăn, về nghệ thuật ẩm thực có thể mang theo mọi lúc, tiện lợi giúp chúng ta có thể tự mình nấu những món ăn ngon cho chính mình, cho bạn bè, người thân hay gia đình thưởng thức sau những giờ làm việc hút thể lực và chất xám
Đi kèm với đó, sự phát triển của khoa học công nghệ ngày càng nhanh chóng Điện thoại di động không còn đơn thuần là thiết bị liên lạc, mà trở thành một công cụ giải trí đa phương tiện và một vật không thể thiếu của mọi người Chính sự phát triển
và phổ biến mạnh mẽ của di động nên ngày càng có nhiều ứng dụng cho di động được phát triển Chính vì những ưu thế trên của điện thoại thông minh, ý tưởng kết hợp sổ tay nấu ăn truyền thống và điện thoại thông minh được nghĩ đến Một ứng dụng trên điện thoại thông minh có chức năng như một cuốn sổ tay mini hướng dẫn về ẩm thực, gọn nhẹ và dễ mang theo gần như mọi lúc mọi nơi giúp mọi người có thể dễ dàng chế biến các món ăn ngon, đa dạng mà không phải mất nhiều công sức, thì giờ tìm hiểu
Vì những lý do đó tôi quyết định đưa ra ý tưởng làm một cuốn sổ tay mini giới thiệu về ẩm thực Việt Nam trên thiết bị di động để nghiên cứu và triển khai
1.1.2 Mục đích
Tạo ra một ứng dụng giống như một cuốn sổ tay mini về ẩm thực trên điện thoại
di động, một ứng dụng tiện lợi, nhỏ gọn có thể bỏ túi mang theo, có thể đem ra dùng trong nhiều trường hợp Giúp bạn có thể chế biến được những món ăn ngon khi cần thiết hoặc nâng cao trình độ nấu ăn, hiểu biết về văn hóa ẩm thực mà không cần phải
bỏ ra nhiều công sức tìm kiếm bên đống sách vở dạy nấu ăn hay những chương trình dạy nấu ăn vốn tiêu tốn rất nhiều thời gian quý báu
Ứng dụng sẽ cung cấp cho người dùng các thông tin về văn hóa ẩm thực các vùng miền, cách chế biến các món ăn hay là nguồn gốc, lịch sử ra đời của các món ăn cùng nhiều tính năng hữu ích khác
Trang 13Xây dựng một website quản lý dữ liệu về thông tin ẩm thực và một webservice cung cấp thông tin về ẩm thực cho ứng dụng di động
1.1.3 Ý nghĩa
- Cung cấp một ứng dụng hữu ích hỗ trợ người dùng về vấn đề ẩm thực, tiết kiệm thời gian, công sức và chi phí mà vẫn có thể dễ dàng chế biến được những món ăn ngon như ý
- Tạo được một website quản lý thông tin dữ liệu ẩm thực và một webservice cung cấp dữ liệu về ẩm thực
- Thông qua quá trình xây dựng ứng dụng, em có thể tổng hợp lại những kiến thức mà mình đã được tích lũy trong thời gian học tập tại trường
- Tích lũy thêm được nhiều kinh nghiệm thực tế, học thêm được nhiều công nghệ mới
1.2 PHẠM VI ĐỀ TÀI
Ứng dụng di động được xây dựng dựa trên nền tảng hệ điều hành di động Android Ứng dụng có thể cập nhật sữ liệu từ webservice và lưu về bộ nhớ cục bộ trên thiết bị Kho dữ liệu ẩm thực được xây dựng và phát triển trên mạng Internet, cung cấp web service và các phương thức để sử dụng và khai thác dữ liệu từ kho dữ liệu ẩm thực
1.3 TRIỂN KHAI ĐỀ TÀI
1.3.1 Các bước thực hiện
- Đọc hiểu đề tài, tìm kiếm các tài liệu liên quan
- Phân tích yêu cầu
- Phân tích và thiết kế hệ thống
- Xây dựng cơ sở dữ liệu
- Xây dựng Web admin quản lý cơ sỡ dữ liệu
- Xây dựng Web service cung cấp dữ liệu
- Xây dựng ứng dụng trên thiết bị di động Android
- Triển khai hoạt động cho kho dữ liệu và ứng dụng, đồng thời tiến hành kiểm thử đảm bảo chất lượng sản phẩm
- Viết báo cáo tổng kết đề tài và đề ra hướng phát triển
Trang 141.3.2 Mục tiêu cần đạt được
- Xây dựng thành công Web admin và Web service cho kho dữ liệu ẩm thực
- Xây dựng thành công ứng dụng trên điện thoại di động Android
- Triển khai ứng dụng, phối hợp trao đổi dữ liệu giữa ứng dụng di động và ứng dụng web thành công
1.4 KẾT QUẢ DỰ KIẾN
Với mục đích đề ra thì kết quả cần đạt được trong đề tài luận văn tốt nghiệp này:
- Tìm hiểu nền tảng di động Android
- Tìm hiểu Web service
- Phân tích yêu cầu người dùng và thiết kế hệ thống
- Xây dựng và triển khai hệ thống trong thực tế
Trang 15CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.1 GIỚI THIỆU CÁC NỀN TẢNG DI ĐỘNG
Ngày này, thị trường di động đang phát triển mạnh mẽ chưa từng thấy với vô vàn các nhãn hiệu, kiểu dáng, tính năng Đã biến chiếc điện thoại thành một thiết bị giải trí đa phương tiện không thể thiếu Với lợi thế nhỏ gọn, được mọi người sử dụng đem theo mọi lúc mọi nơi, nhưng cũng vì nhỏ gọn như vậy cũng là một bất lợi về xử lý
và tốc độ Để đảm bảo một chiếc điện thoại thông minh hoạt động tốt thì nó cần có một
hệ điều hành quản lý thiết bị
Đi kèm với sự phát triển phần cứng trên thiết bị động thì cuộc chiến của các nhà phát triển các hệ điều hành trên điện thoại
di động cũng diễn ra hết sức khốc liệt Hiện nay, các nền tảng di động lớn được biết đến như sau
1.1.1 Ios
Nền tảng di động iOS với điện thoại di động thông minh iPhone, với thiết kế đẹp, thời trang, cảm ứng mượt mà, màn hình đẹp và sắc nét cùng với tài năng của "thánh"
Steve Jobs đã khiến cho iPhone trở thành hiện tượng trên mọi thị trường, đặc biệt là
ở Mỹ Doanh số bán ra của iPhone tăng dần qua các năm, và dần dần thống lĩnh thị trường của nhiều nước iPhone dù mỗi năm chỉ ra một phiên bản mới nhưng sức nóng
đủ lan tỏa khắp làng di động, do đó, iOS vẫn chưa bao giờ "già"
iOS là hệ điều hành "đóng" hoạt động trên iPhone, iPad, iPod iOS đã quyết định
rất nhiều đối với sự thành công của Apple, với giao diện bóng bẩy, đẹp mắt, và dễ sử dụng Tất cả chỉ là chạm và vuốt để thực thi Cùng với chính sách hợp lý để thu hút các lập trình viên viết ứng dụng, kho ứng dụng Appstore ngày càng lớn khiến cho người dùng càng thêm thích thú, mọi nhu cầu của từng người đều có thể được đáp ứng Cũng như việc Apple cũng tung ra cập nhật, vá các lỗi liên tục khi phát hiện, khiến cho iOS ngày càng trở nên "thông minh" hơn, an toàn hơn
Nhưng nếu gọi iOS là thống trị năm 2012 thì điều đó cũng là chưa thể Vì iOS chỉ được cài giới hạn trên thiết bị của Apple gồm những thiết bị như iPhone, iPad, iPod Thị phần của thiết bị Apple trên thế giới nói chung là không lớn, số liệu các bạn thấy trên các báo đa số chỉ thống kê tại Mỹ, nhưng đã gọi là thống trị thì phải là thống trị trên thị trường di động toàn thế giới
Hình 1: Giới thiệu mobile
Trang 161.1.2 Android
Mặc dù sinh sau đẻ muộn, nhưng Android đang có những bước tiến thần tốc, trong thời gian ngắn đã đạt được nhiều điều khiến mọi hệ điều hành di động mơ ước: khoảng 700.000 điện thoại Android được kích hoạt mỗi ngày
Khi mà iOS ngày càng bành trướng mà Symbian lại không đủ sức để cạnh tranh Các lập trình viên, các nhà sản xuất điện thoại chú ý đến Android Hệ điều hành di động mở được Google phát triển dựa trên nền tảng Linux
Android ngày càng lớn mạnh về số lượng và chất lượng bởi sự linh hoạt từ nền
tảng Google, phù hợp với cả smartphone tầm thấp lẫn giá cao Hàng loạt các nhà sản xuất điện thoại di động sử dụng Android làm hệ điều hành chính cho các sản phẩm của mình Như HTC, Samsung, LG, Motorola, Sony Ericsson Từ điện thoại, cho đến máy tính bảng của các hãng này đều dùng hệ điều hành Android Các nhà lập trình viết ứng dụng ngày càng nhiều trên Android Market Kho ứng dụng đang cạnh tranh trực tiếp với AppStore của Apple Chính vì điều này mà đã khiến Android ngày càng bành trướng trên thị trường khắp các châu lục, và dần dần Android sẽ là hệ điều hành thống trị
Nhưng các bạn có thể thấy, dường như Android đang ở trên đỉnh cao của mình Chính vì có quá nhiều thiết bị, mỗi thiết bị có cấu hình riêng, nhà sản xuất tùy biến riêng và việc có quá nhiều ứng dụng, nhưng lại không theo một chuẩn cụ thể nào Khiến Android ngày càng bị phân mảnh và rời rạc
Android được cập nhật quá thường xuyên, dẫn đến tình trạng trên thị trường có nhiều phiên bản cùng tồn tại, được phát hành song song với nhau Google đang dần muốn kiểm soát và hạn chế sự phân mảnh, nhưng đồng thời cũng làm mất dần tính
"mở" vốn là triết lý cơ bản của Android
1.1.3 Windowphone
Windows Phone là hệ điều hành của Microsoft dành cho smartphone kế tục nền tảng Windows Mobile, mặc dù chúng không tương thích với nhau Khác với Windows Mobile, Windows Phone tập trung vào sự phát triển của Marketplace - nơi các nhà phát triển có thể cung cấp sản phẩm (miễn phí hoặc có phí) tới người dùng Windows Phone được bán vào tháng 10 năm 2010 và đầu năm 2011 tại Châu Á Phiên bản mới nhất hiện tại là Windows Phone 8.1 (Tên mã Blue) tiếp nối Windows Phone 8 (Apollo), hiện vẫn ở phiên bản thử nghiệm cho nhà phát triển (Preview for Developers) Với Windows Phone, Microsoft đã phát triển giao diện người dùng mới mang tên Modern (trước đây tên là Metro) - tích hợp khả năng liên kết với các phần cứng và phần mềm của hãng thứ ba một cách dễ dàng
Trang 171.1.4 BlackBerry
Là dòng máy Smartphone cao cấp và nổi tiếng trên thế giới do hãng Research In Motion cung cấp Ngoài những tính năng thông thường, điểm tạo nên sự khác biệt của máy BlackBerry là kiểu thiết kế rất đặc trưng; pin tốt và hơn cả là dịch vụ Push Mail nổi tiếng và thương hiệu BlackBerry được xây dựng rất thành công
BlackBery OS 6 được RIM công bố tại sự kiện Wireless Enterprise Symposium (diễn ra từ 27 đến 29/4 tại Mỹ) RIM chưa đưa ra chi tiết về hệ điều hành mới, ngoài một đoạn video quảng cáo khá ấn tượng Theo những thông tin đầu tiên, nhiều cải tiến từ giao diện, màn hình Home mới, menu pop-up, khả năng chuyển dịch, trình duyệt web mới dựa trên nền tảng WebKit tương thích HTML5 Ngoài ra, BlackBerry
OS 6 hỗ trợ khả năng điều khiển trên màn hình cảm ứng đa điểm tốt hơn
1.2 GIỚI THIỆU HỆ ĐIỀU HÀNH ANDROID
1.2.1 Giới thiệu
Hình 2: Giới thiệu android
Android là hệ điều hành trên điện thoại di động phát triển bởi Google và dựa trên nền tảng Linux Trước đây, Android được phát triển bởi công ty liên hợp Android (sau đó được Google mua lại vào năm 2005) Theo nghiên cứu của công ty nghiên cứu thị trường NPD (National Purchase Diary), thiết bị di động sử dụng hệ điều hành android bán được tại Mỹ trong quý I năm 2012 xếp vị trí đầu tiên với 51%, thứ 2 là iOS ở vị trí với 30.7% Android có một cộng đồng những nhà phát triển rất lớn viết các ứng dụng cho hệ điều hành của mình, điều này khiến Android trở thành hệ điều hành di động có môi trường phát triển cực kì rộng lớn Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java Sự ra mắt của Android vào ngày 5 tháng
11 năm 2007 gắn với sự thành lập của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đính tạo nên một chuẩn mở cho điện thoại di động trong tương lai Google công bố hầu hết các mã nguồn của Android theo bản cấp phép Apache
Trang 18Android được xây dựng để cho phép các nhà phát triển tạo ra các ứng dụng di động hấp dẫn tận dụng tất cả chức năng một chiếc điện thoại đã cung cấp Nó được xây dựng để thực sự mở Ví dụ, một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại như thực hiện cuộc gọi, gửi tin nhắn văn bản hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển tạo ra nhiều phong cách khác nhau
Android được xây dựng trên hệ điều hành mở Linux Vì thế, nền tảng Android luôn được cộng đồng quan tâm và phát triển liên tục
Android không phân biệt giữa các ứng dụng lõi của điện thoại và các ứng dụng của bên thứ ba Tất cả các ứng dụng đều có thể giao tiếp được với nhau, và sử dụng một cách tối đa nhờ vào khả năng của nhà phát triển
Android đang dần phá bỏ rào cản để xây dựng các ứng dụng mới và sáng tạo Ví
dụ, một nhà phát triển có thể kết hợp thông tin từ các trang web với dữ liệu trên điện thoại di động của cá nhân, hoặc chỉ ra địa chỉ hiện tại của một người nào đó khi họ nằm trong một phạm vi cố định…
Android cung cấp một loạt các thư viện công cụ hữu ích và có thể được sử dụng xây dựng các ứng dụng phong phú
1.2.2 Lịch sử phát triển
- Tháng 10-2003: Android, inc được thành lập tại Palo Alto, California bởi Andy Rubin, Rich Miners, Nick Sears và Chris White
- Tháng 8-2005: Google mua lại Android inc
- Tháng 11-2007: Phát hành Android beta SDK (Software Development Kit)
- Tháng 9-2008: Chiếc điện thoại chạy trên hệ điều hành Android lần đầu tiên được giới thiệu, chiếc HTC Dream(G1) chạy Android 1.0
- Tháng 2-2009: Phát hành bản cập nhật Android 1.1 dành riêng cho T-Mobile G1
- Tháng 4-2009: Phát hành bản cập nhật Android 1.5(Cupcake) dựa trên nhân linux 2.6.27
- Tháng 9-2009: Phát hành bộ SDK dành cho Android 1.6 (Donut) dựa trên nhân Linux 2.6.29
- Tháng 10-2009: Phát hành bộ SDK dành cho Android 2.0(Eclair) dựa trên nhân Linux 2.6.29
- Tháng 12-2009: Phát hành bộ SDK 2.0.1
- Tháng 1-2010: Phát hành bộ SDK 2.1
- Tháng 5-2010: Phát hành bộ SDK Android 2.2 (Froyo)
Trang 19- Tháng 12-2010: Phát hành bộ SDK Android 2.3 (Gingerbread)
- Tháng 2-2011: Phát hành Android 2.3.3 dựa trên nhân Linux 2.6.35
- Tháng 2-2011: Phát hành SDK Android 3.0 dành cho tablet được phát hành dựa trên nhân linux 2.6.36
- Tháng 5-2011: Phát hành bộ SDK Android 3.1
- Tháng 7-2011: Phát hành bộ SDK Android 3.2
- Tháng 12-2011: Phát hành bộ SDK Android 4.0 (Ice Cream Sandwich)
- Tháng 7-2012: Phát hành bộ SDK Android 4.1 (Jelly Bean)
- Tháng 12-2012: Phát hành bộ SDK Android 4.2 (Vẫn là Jelly Bean)
- Tháng 6-2013: Phát hành bộ SDK Android 4.3 (Vẫn là Jelly Bean)
- Tháng 10-2013: Phát hành bộ SDK Android 4.4 (KitKat)
1.2.3 Kiến trúc của hệ điều hành Android
Hình 3: Kiến trúc hệ điều hành android
Có 5 tầng cơ bản trong hệ điều hành Android: Application, Framework, Android Runtime, Native Libraries, Linux Kernel Mỗi tầng làm việc đều nhờ sự giúp đỡ của tầng dưới
Trang 20Tầng Application: bao gồm tất cả các ứng dụng có trong thiết bị chạy Android
như: phone, contact, game, browser,… và một số ứng dụng chạy ngầm.Người dùng
có quyền gỡ bỏ hay cài đặt các ứng dụng tùy thích ở tầng này Tất cả các ứng dụng được viết bằng cách sử dụng ngôn ngữ lập trình Java
Tầng Application Framework: tầng Google xây dựng cho các nhà phát triển xây
dựng ứng dụng của họ trên Android,bằng cách gọi các API có sẵn mà Google đã viết
để sử dụng các tính năng của phần cứng mà không cần hiểu cấu trúc bên dưới
Tầng Native Libraries: Android bao gồm một bộ thư viện C/C++, được sử dụng
bởi các thành phần khác nhau của hệ thống Android Những khả năng tiếp xúc với các nhà phát triển thông qua các khuôn khổ ứng dụng Android Một số các thư viện lõi được liệt kê dưới đây:
System C library: thực hiện các hệ thống thư viện chuẩn C (LIBC – Library C), điều chỉnh cho nhúng dựa trên Linux các thiết bị
Media Libraries: dựa trên OpenCORE PacketVideo's; sự hỗ trợ các thư viện phát lại và ghi âm của âm thanh và phổ biến nhiều định dạng video, cũng như các tập tin hình ảnh tĩnh, bao gồm MPEG4, H.264, MP3, AAC, AMR, JPG, và PNG
Surface Manager: quản lý quyền truy cập vào hệ thống con hiển thị và hoàn toàn phù hợp chất 2D và 3D lớp từ nhiều ứng dụng đồ họa
LibWebCore: một trình duyệt web hiện đại, động cơ có quyền hạn cả hai trình duyệt web của Android và một xem nhúng
SGL: các công cụ đồ họa 2D tiềm ẩn
3D libraries:một việc thực hiện dựa trên OpenGL ES 1,0 API; các thư viện, hoặc
sử dụng phần cứng tăng tốc 3D (nếu có) hoặc bao gồm, cao tối ưu rasterizer phần mềm 3D
SQLite: một quan hệ cơ sở dữ liệu mạnh mẽ và nhẹ có sẵn cho tất cả các ứng dụng
Tầng Runtime: Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp
hầu hết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java Tất
cả các ứng dụng Android đều chạy trong tiến trình riêng Máy ảo Dalvik đã được viết
để cho một thiết bị có thể chạy nhiều máy ảo hiệu quả Các VM Dalvik thực thi các tập tin thực thi Dalvik (dex) Định dạng được tối ưu hóa cho bộ nhớ tối thiểu VM là dựa trên register-based, và chạy các lớp đã được biên dịch bởi một trình biên dịch Java để chuyển đổi thành các định dạng dex Các VM Dalvik dựa vào nhân Linux cho các chức năng cơ bản như luồng và quản lý bộ nhớ thấp
Tầng Linux Kernel: đây là nhân của hệ điều hành Android, mọi xử lý hệ thống
đều phải thông qua tầng này Linux Kernel cung cấp các trình điều khiển thiết bị phần cứng như: camera, USB, bluetooth… Kernel hoạt động như một lớp trừu tượng giữa phần cứng và phần mềm còn lại của hệ thống
Trang 211.3 LẬP TRÌNH ỨNG DỤNG TRONG ANDROID
1.3.1 Công cụ hỗ trợ
- Bộ Android SDK của Google
- Bộ JDK 5 trở lên
- IDE: eclipse hoặc netBean…
1.3.2 Các thành phần chính trong android project
1.3.2.1 Các thành phần chính trong android
Một ứng dụng android được xây dựng từ các thành phần cơ bản sau:
- Activity: hiểu một cách đơn giản thì Activity là nền của 1 ứng dụng Khi khởi
động 1 ứng dụng Android nào đó thì bao giờ cũng có 1 main Activity được gọi, hiển thị màn hình giao diện của ứng dụng cho phép người dùng tương tác
- Service: thành phần chạy ẩn trong Android Service sử dụng để update dữ liệu,
đưa ra các cảnh báo (Notification) và không bao giờ hiển thị cho người dùng thấy
- Content Provider: kho dữ liệu chia sẻ Content Provider được sử dụng để
quản lý và chia sẻ dữ liệu giữa các ứng dụng
- Intent: nền tảng để truyền tải các thông báo Intent được sử dụng để gửi các
thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện công việc bạn mong muốn
- Broadcast Receiver: thành phần thu nhận các Intent bên ngoài gửi tới
- Notification: đưa ra các cảnh báo mà không làm cho các Activity phải ngừng
hoạt động
Activity, Service, Broadcast Receiver và Content Provider mới là những thành phần chính cấu thành nên ứng dụng Android, bắt buộc phải khai báo trong AndroidManifest
1.3.2.2 AndroidManifest
Trong bất kì một project Android nào khi tạo ra đều có một file AndroidManifest.xml, file này được dùng để định nghĩa các screen sử dụng, các permission cũng như các theme cho ứng dụng Đồng thời nó cũng chứa thông tin về phiên bản SDK cũng như main activity sẽ chạy đầu tiên File này được tự động sinh ra khi tạo một Android project Trong file manifest bao giờ cũng có 3 thành phần chính đó là: application, permission và version
Trang 22- Application: bên trong thẻ này chứa các thuộc tính được định nghĩa cho ứng
Ngoài ra còn nhiều thuộc tính khác…
- Permission: Bao gồm các thuộc tính chỉ định quyền truy xuất và sử
dụng tài nguyên của ứng dụng Đây là cơ chế bảo mật của android, mặc định ứng dụng android không được cấp quyền nào, để cấp quyền cho ứng dụng ta sử dụng thuộc tính <user-permission>, định dạng như sau: <uses-permission android:name="string" /> Trong đó: android:name dùng xác định tên quyền hạn
- SDK version: chỉ ra phiên bản SDK nhỏ nhất và chuẩn nhất mà ứng dụng hiện
Hình 4: Sơ đồ hoạt động activity trong android
Trang 23Các trạng thái trong Activity:
- Running: Activity đang hiển thị trên màn hình (foreground)
- Paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus)
- Stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop
- Killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu tiên Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó
Vòng đời của một activity bao gồm 3 vòng chính:
- Entire lifetime: từ phương thức onCreate() đến onDestroy()
- Visible lifetime: từ phương thức onStart() đến onStop()
- Foreground lifetime: từ phương thức onResume() đến onPause()
1.3.3.1 Các phương thức trong chu kỳ sống của một activity
- onCreate()
Được gọi khi activity lần đầu tiên được tạo
Đây là nơi ta nên thực hiện khởi tạo tĩnh thông thường — tạo giao diện người dùng (các view), nối dữ liệu với các danh sách, v.v
Tham số được truyền một đối tượng Bundle chứa trạng thái cũ của activity, nếu như trạng thái đã được ghi lại
onStart() luôn được gọi sau đó
- onRestart()
Được gọi ngay trước khi activity được khởi động lại sau khi đã bị dừng (stopped) onStart() luôn được gọi sau đó
- onResume()
Được gọi ngay trước khi activity bắt đầu tương tác với người dùng
Tại thời điểm này, activity nằm trên đỉnh activity stack và nhận input của người dùng
Tiếp theo bao giờ cùng là onPause()
- onPause()
Được gọi khi hệ thống chuẩn bị chuyển sang một activity khác
Trang 24Phương thức này thường dùng để ghi các thay đổi chưa được lưu, dừng hoạt hình
và những công việc tốn CPU khác, v.v
Nó nên làm công việc của mình thật nhanh vì activity tiếp theo phải đợi nó kết thúc thì mới resume được
Tiếp theo là onResume() nếu activity quay lại, hoặc onStop() nếu nó không còn được hiển thị đối với người dùng
Activity trong trạng thái này có thể bị hệ thống kill
- onStop()
Được gọi khi activity không còn hiển thị đối với người dùng
Việc này có thể xảy ra khi nó bị hủy (destroyed), hoặc do một activity khác (cũ hoặc mới) đã được resume và che nó
Tiếp theo là onRestart() nếu activity tương tác trở lại với người dùng, hoặc onDestroy() nếu nó không quay lại
Hệ thống có thể kill activity trong trạng thái này
- onDestroy()
Được gọi trước khi activity bị hủy
Đây là lời gọi hàm cuối cùng mà activity nhận được
Nó có thể được gọi vì activity đang kết thúc (hàm finish() của activity được gọi), hoặc vì hệ thống đang tạm thời hủy thực thể hiện tại của activity để tiết kiệm không gian bộ nhớ
Ta có thể phân biệt hai tình huống trên bằng cách dùng phương thức isFinishing()
Hệ thống có thể kill activity trong trạng thái này
1.3.4 Intent
Intent là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện một Activity Intent là cầu nối giữa các Activity trong ứng dụng Intent chính là người đưa thư, giúp chúng ta triệu gọi cũng như truyền dữ liệu cần thiết để thực hiện một Activity từ một Activity khác
Hình 5: Sơ đồ Intent
Trang 25Intent là một khái niệm then chốt và đặc trưng của Android Platform Có thể nói lập trình Android chính là lập trình intent-base
Intent về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớp android.content.Intent
1.3.4.1 Các thuộc tính của một đối tượng intent
Bảng 1: Các thuộc tính của đối tượng intent
Action: tên(string) của action mà Intent sẽ
yêu cầu thực hiện, có thể là các action
được định nghĩa sẵn hoặc do người lập
trình tự định nghĩa
Data: là dữ liệu mà Activity sẽ gọi xử lý,
định dạng Uri( thông qua hàm
Uri.parse(data))
Category:thông tin về nhóm các action Type:định nghĩa kiểu dữ liệu Thường được tự động xác định
Component: chỉ định cụ thể lớp sẽ thực thi activity
Extras:chứa tất cả các cặp (key, value) do ứng dụng thêm vào để truyền qua Intent( chứa cấu trúc Bundle)
1.3.4.2 Sử dụng Intent
Các hàm thực thi Activity
Bảng 2: Các hàm thực thi Activity
startActivity(intent) Thực thi activity như mô tả trong intent
nhưng không lấy kết quả trả về
startActivityResult Thực thi activity như mô tả trong intent,
có kết quả trả về
sendBroadcast(intent) Chạy một service
bindService(intent.ServiceConnection,int) Bind service
Intent tường minh: Intent có thể dùng các thuộc tính phụ component để chỉ định đích danh tên lớp sẽ thực thi Activity Để thực hiện điều này, lớp Intent cung cấp các hàm đó là setComponent(ComponentName) và setClass(Context, Class) và setClassName (Context, String) setClassName(String, String) Là intent được dùng
để gọi các Activity trong cùng một app
Intent không tương minh: Intent không chỉ định một lớp cụ thể mà thay vào đó dùng các dữ liệu khác (action, data, type ) để hệ thống tự quyết định xem lớp nào sẽ thích hợp để đáp ứng intent đó Thông tin action và category của activity trong một app đáp ứng intent đó phải được khai báo trong Manifest của app dưới dạng Intent-filter Truyền nhận thông tin giữa các Activity sử dụng intent
Trang 261.3.5 Adapter trong andoid
Adapter là cầu nối để liên kết dữ liệu với giao diện người dùng
Một số Adapter cơ bản :
- ArrayAdapter: là một lớp chung để gắn các Adapter Views vào một mảng
đối tượng, theo mặc định thì ArrayAdapter liên kết cá giá trị toString của từng đối tượng ra TextView trong layout, chúng ta có thể thay thế TextView bằng các điều khiển khác phức tạp hơn bằng cách sử dụng kỹ thuật Overriding phương thức getView()
- SimpleCursorAdapter: dùng để liên kết các View với con trỏ để trả về câu
truy vấn cho Content Provider, nó được định nghĩa trong file XML layout và liên kết các giá trị ràng buộc bên trong mỗi cột kết quả với View trong layout
1.3.6 Lưu trữ dữ liệu trong android
Các kỹ thuật duy trì dữ liệu trong Android nhanh chóng, gọn nhẹ, hiệu quả và mạnh mẽ:
- Shared Preferences: Khi muốn lưu trữ UI state ,user preferences hay
application setting, chúng ta muốn có một cơ chế gọn nhẹ để lưu trữ một tập hợp các giá trị được biết đến, Shared Preferences cho phép chúng ta lưu trữ nhóm của key/value của dữ liệu gốc
Files: Android cho phép tạo và tải các tập tin trên thiết bị di động
- SQLite Databases: quản lý cấu trúc dữ liệu là cách tốt nhất Android cung
cấp thư viện quan hệ cơ sở dữ liệu SQLite, mỗi ứng dụng có thể tạo ra một cơ sở
dữ liệu của mình để nó kiểm soát hoàn toàn trên đó
- Content Providers: Thay vì theo cơ chế lưu trữ riêng ,Content Providers cung
cấp nội dung cho phép đưa ra một giao diện để sử dụng và chia sẻ dữ liệu cá nhân Chúng ta có thể truy cập Content Providers để sử dụng hệ thống được phép
1.3.7 Giao diện trong android
1.3.7.1 View
Trong một ứng dụng Android, giao diện người dùng được xây dựng từ các đối tượng View và ViewGroup Có nhiều kiểu View và ViewGroup Mỗi một kiểu là một hậu duệ của class View và tất cả các kiểu đó được gọi là các Widget Tất cả mọi widget đều có chung các thuộc tính cơ bản như là cách trình bày vị trí, background,
Trang 27kích thước, lề,… Tất cả những thuộc tính chung này được thể hiện hết ở trong đối tượng View
Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc phân cấp như hình dưới Một screen là một tập hợp các Layout và các widget được bố trí
có thứ tự Để thể hiện một screen thì trong hàm onCreate của mỗi Activity cần phải được gọi một hàm là setContentView(R.layout.main); hàm này sẽ load giao diện từ file XML lên để phân tích thành mã bytecode
Hình 6: Sơ đồ giao diện trong android
1.3.7.2 ViewGroup
ViewGroup thực ra chính là View hay nói đúng hơn thì ViewGroup chính là các widget Layout được dùng để bố trí các đối tượng khác trong một screen Có một số loại ViewGroup như sau:
- LinearLayout: với LinearLayout, các view bên trong nó được đặt cạnh nhau
theo hàng ngang hoặc hàng dọc LinearLayout làm cho các thành phần trong nó không bị phụ thuộc vào kích thước của màn hình Các thành phần trong LinearLayout được dàn theo những tỷ lệ cân xứng dựa vào các ràng buộc giữa các thành phần
- FrameLayout: FrameLayout được dùng để bố trí các đối tượng theo kiểu
giống như là các Layer trong Photoshop Những đối tượng nào thuộc Layer bên dưới thì sẽ bị che khuất bởi các đối tượng thuộc Layer nằm trên FrameLayer thường được sử dụng khi muốn tạo ra các đối tượng có khung hình bên ngoài chẳng hạn như contact image button
Trang 28Hình 7: Framelayout android
- AbsoluteLayout: Layout này được sử dụng để bố trí các widget vào một vị trí
bất kì trong layout dựa vào 2 thuộc tính toạ độ x, y Tuy nhiên, kiểu layout này rất
ít khi được dùng bởi vì toạ độ của các đối tượng luôn cố định và sẽ không tự điều chỉnh được tỷ lệ khoảng cách giữa các đối tượng Khi chuyển ứng dụng sang một màn hình có kích thước với màn hình thiết kế ban đầu thì vị trí của các đối tượng
sẽ không còn được chính xác như ban đầu
- RetaliveLayout: Layout này cho phép bố trí các widget theo một trục đối
xứng ngang hoặc dọc Để đặt được đúng vị trí thì các widget cần được xác định một mối ràng buộc nào đó với các widget khác Các ràng buộc này là các ràng buộc trái, phải, trên, dưới so với một widget hoặc so với layout parent Dựa vào những mối ràng buộc đó mà RetaliveLayout cũng không phụ thuộc vào kích thước của screen thiết bị Ngoài ra, nó còn có ưu điểm là giúp tiết kiệm layout sử dụng nhằm mục đích giảm lượng tài nguyên sử dụng khi load đồng thời đẩy nhanh quá trình xử lý
Trang 29Hình 8: Relativelayout android
- TableLayout: Layout này được sử dụng khi cần thiết kế một table chứa dữ
liệu hoặc cần bố trí các widget theo các row và column Chẳng hạn như, giao diện của một chiếc máy tính đơn giản hoặc một danh sách dữ liệu
Hình 9; Tablelayout android
Trang 301.4 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU SQLITE
1.4.1 Giới thiệu
SQLite là phần mềm quản lý cơ sở dữ liệu (DBMS) tương tự như Mysql, PostgreSQL Đặc điểm của SQLite là gọn, nhẹ, đơn giản Chương trình gồm 1 file duy nhất vỏn vẹn chưa đến 500kB, không cần cài đặt, không cần cấu hình hay khởi động mà có thể sử dụng ngay Dữ liệu database cũng được lưu ở một file duy nhất Không có khái niệm người sử dụng, password hay quyền hạn trong SQLite database
Hình 10: Quản trị SQLite
SQLite không thích hợp với những hệ thống lớn nhưng ở quy mô vừa tầm thì SQLite phát huy uy lực và không hề yếu kém về mặt chức năng hay tốc độ Với các đặc điểm trên SQLite được sử dụng nhiều trong việc phát triển, thử nghiệm và là sự lưa chọn phù hợp cho những người bắt đầu học database
1.4.2 Đặc điểm
- Cơ sở dữ liệu dạng quan hệ (RDBMS), hỗ trợ chuẩn SQL-92
- Sử dụng dưới dạng thư viện nhúng, không chạy ở theo kiểu server độc lập
- Hỗ trợ các ngôn ngữ phổ biến: C, C++, C#, Basic, Python, PHP, Java
- Không cần chỉ định kiểu dữ liệu (SQLite is typeless)
- Hỗ trợ mã UTF-8
- Hỗ trợ hiển thị
- Hỗ trợ C extensions
- Có các công cụ quản lý bằng đồ hoạ
- Download & sử dụng miễn phí
Trang 311.4.3 Phiên bản
Hiện tại SQLite có 2 nhánh khác nhau là version 2.x và version 3.x, do cấu tạo dữ liệu nội bộ khác nhau nên tên lệnh và tên thư viện của từng nhánh khác nhau Lệnh sqlite là của version 2.x, sqlite3 là lệnh của version 3.x Địa chỉ trang chủ http://sqlite.org
1.5 Web service
1.5.1 Giới thiệu
Web Services là một cách chuẩn để tích hợp các ứng dụng trên nền web
(Web-based applications) Các ứng dụng có thể sử dụng các thành phần khác nhau để tạo thành một dịch vụ, ví dụ như máy chủ chạy một trang web thương mại điện tử kết nối với cổng thanh toán điện tử qua một API - Application Programming Interface ( tạo bởi công nghệ NET thì web service chính là nền máy chủ (IIS - Internet Information Services), và các thành phần thanh toán, các thành phần NET được coi là component (các thành phần bên ngoài) Các thành phần này được gọi bởi phương thức SOAP (Khác phương thức POST, GET) nên không bị gặp phải firewall khi truy xuất các thành phần bên ngoài máy chủ Và toàn bộ các thành phần đó gọi là một Web Services
Các Web Services cho phép các tổ chức thực hiện truyền thông dữ liệu mà không cần phải có kiến thức về hệ thống IT phía sau tường lửa Một số Web Services hiện nay có sẵn miễn phí và càng ngày càng hướng dần vào các doanh nghiệp
Một ví dụ về Web Service sẵn có là dịch vụ được cung cấp bởi PayPal cho phép những người có tài khoản có thể thanh toán hoặc trả một phần hoặc thực hiện các giao dịch tìm kiếm, và lấy lại các thông tin của từng giao dịch cụ thể
Ngày này, web service được phát triển trên hầu hết các nên tảng web server hiện tại, như là :
- Apache với PHP
- Tomcat với JSP, Java
- IIS với Net, ASP
Trang 32- Khả năng tự mô tả: giao diện của dịch vụ web được xuất bản thông qua tài liệu WSDL Tài liệu này định nghĩa cấu trúc thông điệp trao đổi và cấu trúc dữ liệu sử dụng trong thông điệp đó
- Tách biệt giữa mô tả và nội dung: đây là một trong những đặc tính then chốt làm nên thành công cho Web Services
- Web service không đòi hỏi phía client phải cài đặt bất cứ một thành phần mới nào Còn ở phía server, để triển khai Web service thì chỉ cần có Servlet engine, Apache hoặc NET Runtime,… Khi đã được triển khai thì client có thể sử dụng ngay các dịch vụ Điều này khác với các công nghệ khác như DCOM hay RMI, khi mà client phải cài đặt Client stub để có thể truy cập dịch vụ
- Dựa trên các chuẩn mở: XML, SOAP, WSDL, UDDI
- Truy cập thông qua môi trường Web: web services được phát hành, xác định
và gọi đều thông qua môi trường Web Trong đó các mô tả về dịch vụ được xuất bản sử dụng WSDL, người dùng tìm kiếm và xác định dịch vụ nhờ sự trợ giúp của UDDI và yêu cầu dịch vụ bằng SOAP Tất cả các giao thức này đều dựa trên Web
- Nâng cao khả năng tái sử dụng
- Thúc đẩy đầu tư các hệ thống phần mềm đã tồn tại bằng cách cho phép các tiến trình/chức năng nghiệp vụ đóng gói trong giao diện Web service
- Tạo mối quan hệ tương tác lẫn nhau và mềm dẻo giữa các thành phần trong hệ thống, dễ dàng cho việc phát triển các ứng dụng phân tán
- Thúc đẩy hệ thống tích hợp, giảm sự phức tạp của hệ thống, hạ giá thành hoạt động, phát triển hệ thống nhanh và tương tác hiệu quả với hệ thống của các doanh nghiệp khác
Trang 331.5.2.2 Nhược điểm
- Những thiệt hại lớn sẽ xảy ra vào khoảng thời gian chết của Web service, giao diện không thay đổi, có thể lỗi nếu một máy khách không được nâng cấp, thiếu các giao thức cho việc vận hành
- Có quá nhiều chuẩn cho Web service khiến người dùng khó nắm bắt
- Phải quan tâm nhiều hơn đến vấn đề an toàn và bảo mật
1.6 RESTFUL WEB SERVICE
1.6.1 Khái niệm
1.6.1.1 REST
REST viết tắt của chữ Representational State Transfer – theo nghĩa cho phép người dùng truy cập tài nguyên – resources (có thể là dữ liệu trước và sau xử lý hay chức năng của ứng dụng) - của ứng dụng trên web services thông qua uri
Thực hiện cơ chế nói chuyện giữa server và client là điểm điểm – point to point
Dữ liệu được truyền trực tiếp trên HTTP và được truy cập thông qua HTTP theo đúng định dạng MIME mà không cần thông qua dạng SOAP – giảm bớt sự phức tạp – vì đơn giản chúng ta sẽ coi dữ liệu và chức năng như là tham số truyền hay dữ liệu đính kèm trong HTTP
Cho phép thao tác dữ liệu dưới 4/7 phương thức được định nghĩa trong HTTP đó
là GET, POST, PUT, DELETE để qui định rõ cách thao tác dữ liệu trên server, cái nào được truy cập, các nào được sửa đổi, cái nào được hiển thị và dấu ẩn …
1.6.1.2 Kiến trúc
Hình 11: Kiến trúc REST
Trang 34- Client-Server:
Phân tách giao diện của client ra khỏi dữ liệu
Cho phép mỗi thành phần phát triển độc lập
Hỗ trợ đa nền
- Stateless:
Mỗi yêu cầu của client phải đầy đủ thông tin cần thiết để server có thể hiểu được
mà không cần phải lưu trữ thêm thông tin nào trước đó
1.6.1.3 RESTFul Web Service
Là một web service đơn giản dùng HTTP và tính chất của REST
Là một tập tài nguyên giữa các thành phần được định nghĩa:
- URI gốc cho web service
- MIME type hỗ trợ bởi web service
- Tập hỗ trợ hành động sử dụng HTTP method (GET,PUT,POST,DELETE)
1.6.1.4 Cơ chế hoạt động
Hình 12: Cơ chế hoạt động của REST
Trang 35Client gửi request yêu cầu resources thông qua HTTP
Web services dựa trên request để đáp ứng yêu cầu và response kết quả trả về Response được trả về theo đúng định dạng yêu cầu của client
Client xử lý kết quả từ response để đáp ứng yêu cầu của mình
1.6.1.5 Một số thành phần của RESTful Web Service
- Resources: có thể là chuỗi, hình ảnh, xml, tập tin …
- JAX-RS: Cung cấp chức năng và API cho việc xây dựng ứng dụng với RESTful Web Services
- JAX-RS API:
o Một API của JavaEE
o Sử dụng tạo web service với các hàm API với annotations
o Định nghĩa Java class như là một Resource class
o Định nghĩa 02 loại resources: root resource và sub resource thông qua
@Path
Trong đó, sub resource được truy cập thông qua root
o Root resource thông thường là được khai báo ở đầu class
o Sub resource được khai báo trên các method, nghĩa là các method được truy cập thông qua root theo đường dẫn trên server
o Cú pháp của @Path: @Path(“resourcePath/{param1}/…/{paramN}”)
o Package chứa các thành phần là javax.ws.rs
o Các method của HTTP được hỗ trợ thông qua các khai báo annotations
Bảng 3: Các method của HTTP được hỗ trợ
@POST Dùng cho HTTP POST method
@DELETE Dùng cho HTTP DELETE method
Trang 361.6.2 Json và Gson
1.6.2.1 Sơ lược về json
JSON là cú pháp để lưu trữ và trao đổi thông tin văn bản Cũng giống như XML JSON là nhỏ hơn so với XML, và nhanh hơn và dễ dàng hơn để phân tích (parse) JSON sử dụng cú pháp JavaScript để mô tả đối tượng dữ liệu, nhưng JSON là ngôn ngữ và nền tảng độc lập Trình phân tích cú pháp(parsers) JSON và các thư viện JSON tồn tại cho nhiều ngôn ngữ lập trình khác nhau
- JSON là viết tắt của JavaScript Object Notation
- JSON là định dạng trao đổi dữ liệu văn bản dung lượng nhẹ
- JSON là ngôn ngữ độc lập
- JSON được "tự mô tả" và dễ hiểu
1.6.2.2 So sánh với XML
- Giống nhau :
o JSON là văn bản trơn (không có định dạng(màu sắc, cỡ chữ,…))
o JSON là "tự mô tả" (người dùng có thể hiểu được)
o JSON là phân cấp (có cấu trúc cây)
o JSON có thể được phân tích cú pháp (parse) bởi JavaScript
o Dữ liệu JSON có thể được truyền đi bằng AJAX
đối tượng JavaScript
- Dữ liệu là các cặp tên/giá trị (name/values)
- Dữ liệu được phân cách bằng dấu phẩy
- Đối tượng nằm trong cặp ngoặc nhọn ‘{}’
- Dấu ngoặc vuông giữ mảng ‘[]’
Trang 37- Cặp Tên/Giá trị của JSON : Một cặp Tên/Giá trị chứa tên 1 trường (trong dấu nháy đôi “”), theo sau là dấu phẩy, cuối cùng là giá trị:
"firstName" : "John"
- Các kiểu giá trị của JSON:
o Kiểu số nguyên (int) hay số thực (float)
o Kiểu chuỗi (String)
o Kiểu Boolean (true or false)
o Kiểu mảng (nằm trong dấu ngoặc vuông [])
o Kiểu đối tượng (được đặt trong dấu ngoặc nhọn {})
- Mảng của JSON : Mảng JSON nằm trong dấu ngoặc vuông []
- Mảng có thể chứa nhiều đối tượng:
Bảng 5: Mảng Json
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ]
}
Trích xuất thông tin từ JSON : Trong Android hỗ trợ 2 kỹ thuật trích xuất thông tin và thấy thông tin về từ webservice lưu theo kiểu JSON
Trang 38Cách 1 : Sử dụng đối tượng JSONObject
Thiết lập 1 kiểu key/value Key phải là duy nhất và không được null Value của JSONObject, JSONArray phải là 1 trong các kiểu cơ bản sau : String, Boolean, Integer, Long, Double, NULL
Cách 2 : Sử dụng đối tượng GSON Được cung cấp và sử dụng khi Android
Application làm việc với file JSON
1.6.2.3 Sơ lược về Gson
GSON là 1 thư viện được viết bằng ngôn ngữ Java được sử dụng để chuyển đổi đối tượng Java vào trong file JSON và chuyển đổi chuối JSON thành đối tượng Java JSON là mã nguồn mở được cung cấp tại địa chỉ : http://code.google.com/p/google-gson
Mục đính của GSON: Cung cấp dễ dàng sử dụng các phương thức như toString()
và các phương thức chuyển đổi giữa đối trượng trong Java và JSON và ngược lại Tạo đối tượng trong GSON : Có thể sử dụng câu lệnh sau :
Gson gson = new Gson();
Và dùng đối tượng gson vừa tạo ra gọi các phương thức của nó
Ví dụ đơn giản như sau :
Bảng 6: Ví dụ sử dụng Gson
Gson gson = new Gson();
// Chuyển giá trị sang chuỗi
// Chuyển chuỗi sang giá trị có kiểu tương ứng
int one = gson.fromJson("1", int.class);
Integer one = gson.fromJson("1", Integer.class);
Long one = gson.fromJson("1", Long.class);
Boolean false = gson.fromJson("false", Boolean.class);
String str = gson.fromJson("\"abc\"", String.class);
String anotherStr = gson.fromJson("[\"abc\"]", String.class);
Trang 39Lấy giá trị của lớp
class DemoJson {
private int value1 = 1;
private String value2 = "abc";
DemoJson () {
}
}
DemoJson obj = new DemoJson ();
Gson gson = new Gson();
String json = gson.toJson(obj);
==> Chuỗi Json là {"value1":1,"value2":"abc"}
1.7 JSP VÀ SERVLET
1.7.1 JSP
JSP (viết tắt của tiếng Anh Java Server Pages) còn được biết đến với một cái tên khác là Java Scripting Preprocessor - tạm dịch là "Bộ tiền xử lý văn lệnh Java" - là một công nghệ Java cho phép các nhà phát triển tạo nội dung HTML, XML hay một
số định dạng khác của trang web một cách năng động, trong khi hồi âm yêu cầu của trình khách Công nghệ này cho phép người ta nhúng mã Java và một số hành động
xử lý đã được định trước (pre-defined actions) vào trong nội dung tĩnh của trang
Cú pháp của JSP cho thêm các thẻ XML mới, gọi là JSP actions - hành động JSP Những "hành động JSP" này được dùng để khởi động chức năng sẵn có, là những chức năng đã được xây dựng trước Cộng thêm vào đó, công nghệ còn cho phép chúng
ta tạo ra các thư viện thẻ JSP (JSP tag libraries), là những cái đóng vai trò vào việc
mở rộng các thẻ HTML hay XML tiêu chuẩn Thư viện thẻ (Tag libraries) là phương pháp mở rộng khả năng của một máy chủ web trong khi những mở rộng đó không phụ thuộc vào hệ nền (về cả cấu trúc máy cũng như hệ điều hành được dùng)
Trước khi hiển thị ra trình duyệt, tập tin JSP phải được biên dịch thành Servlet, dùng bộ biên dịch JSP (JSP compiler) Bộ biên dịch JSP có thể tạo servlet thành mã nguồn Java trước, rồi biên dịch mã nguồn ra tập tin class dùng bộ biên dịch Java, hoặc có thể trực tiếp tạo mã byte code cho servlet từ trang JSP
Trang 40của máy chủ bằng việc sử dụng HTTP cookies, các giá trị session hoặc URL rewriting
Servlet API, được chứa trong gói Java kế thừa từ Bản mẫu:Javadoc, định nghĩa những tương tác cần thiết giữa một Web container và một servlet A Web container là một thành phần cơ bản và cần thiết của Web Server để tương tác với các Servlet The Web container chịu trách nhiệm quản lý vòng đời của các Servlet, ánh xạ đường dẫn đến một Servlet cụ thể và đảm bảo rằng có thể truy cập vào
1.7.3 MÔ HÌNH MVC TRONG JAVA WEB JSP SERVLET
1.7.3.1 Khái niệm cơ bản về mô hình MVC
Tên gọi Mô hình MVC xuất phát từ tên gọi của mô hình này Tên đầy đủ của mô hình này là: Mô hình (Model – View – Controller) Trong đó:
Model: Là thành phần hỗ trợ việc ánh xạ dữ liệu vật lý lên bộ nhớ, lưu trữ dữ liệu
tạm thời trên bộ nhớ, hỗ trợ cấc cách thức xử lý dữ liệu, hỗ trợ khả năng giao tiếp và trao đổi dữ liệu giữa các đối tượng khác trong bộ nhớ và cơ sở dữ liệu
View: Là thành phần hỗ trợ trình bày kết xuất ra màn hình, hỗ trợ thao tác vơi
người dùng
Controller: Là thành phần hỗ trợ kết nối người dùng, server, đón nhập yêu cầu
người dùng, thực hiện chuyển xử lý, lựa chọn và cập nhật model và view tương ứng
để view trình bày về phía người dùng
1.7.3.2 Mô hình MVC trong ứng dụng web với JSP Servlet
Trong lập trình Web với Java, với những dự án lớn hay Web site lớn người ta sử dụng mô hình MVC để việc phân chia module, phân chia công việc, thiết kế giao diện, chỉnh sửa và bảo trì nâng cấp được thuận tiện hơn Trong đó:
Model: Thành phần JavaBeans đảm nhiệm ( lớn hơn có Enterprise JavaBeans hay
Web Service)
View: các trang jsp
Controller : sử dụng servlet