Bài tập 31: Cách sử dụng SQLite trong AndroidBài tập 32: Tiếp tục củng cố kiến thức SQLite, ví dụ tổng hợp quản lý sáchBài tập 33: Sử dụng ContentProvider trong AndroidBài tập 34: đa tiến trình trong Android (MultiThreading)Bài 35 : Vẽ Button lúc Runtime, dùng Using Message của Handler classBài 36: Update ListView At runtime by Handler class using postBài 37: Xử lý đa tiến trình bằng AsyncTaskBài 38: Lấy kết quả trả về sau khi thực hiện đa tiến trình bằng AsyncTaskBài 39: Kết hợp AsyncTask và Handler classBài 40: Tìm hiểu Broadcast Receiver, ứng dụng viết phần mềm xử lý tin nhắn rácBài 41: Phần mềm xử lý tin nhắn rắcBài 42: Đáp án mẫu đề thi cuối kỳ AndroidBài 43: Android vs .net Web ServicesBài 44: Cách tạo WebserviceBài 45: Sử dụng .Net Webservice trong C
Lập trình Android-phần Bài tập 31: Cách sử dụng SQLite Android Bài tập 32: Tiếp tục củng cố kiến thức SQLite, ví dụ tổng hợp quản lý sách Bài tập 33: Sử dụng ContentProvider Android Bài tập 34: đa tiến trình Android (Multi-Threading) Bài 35 : Vẽ Button lúc Runtime, dùng Using Message Handler class Bài 36: Update ListView At runtime by Handler class using post Bài 37: Xử lý đa tiến trình AsyncTask Bài 38: Lấy kết trả sau thực đa tiến trình AsyncTask Bài 39: Kết hợp AsyncTask Handler class Bài 40: Tìm hiểu Broadcast Receiver, ứng dụng viết phần mềm xử lý tin nhắn rác Bài 41: Phần mềm xử lý tin nhắn rắc Bài 42: Đáp án mẫu đề thi cuối kỳ Android Bài 43: Android vs net Web Services Bài 44: Cách tạo Webservice Bài 45: Sử dụng Net Webservice C# Bài tập 31: Cách sử dụng SQLite Android Bài tập Tôi hướng dẫn bạn cách sử dụng SQLite Android Thay lưu trữ text file, XML hay SharePreference bạn lưu trữ thông tin SQLite SQLite tích hợp sẵn Android SDK Trong bạn học phần sau: 1) Cách tạo / xóa sở liệu SQLite Android 2) Cách tạo / xóa bảng SQLite 3) Cách thêm/ sửa/ xóa liệu bảng 4) Cách truy vấn liệu bảng – Tất nhiên nhiều chức khác, theo Tôi bạn cần làm tốt phần viết ứng dụng Android có SQLite cách chuyên nghiệp – Theo Tôi bạn nên sử dụng công cụ SQLite Administrator: http://download.orbmu2k.de/files/sqliteadmin.zip để tạo hoàn chỉnh CSDL sau kéo thả tập tin vào DDMS cho lẹ (cái bạn tải tự tạo, kéo thả vào DDMS) Còn hướng dẫn Tôi muốn giúp bạn hiểu sâu xa bên (hướng programmer) CSDL SQLite – Giả sử bạn cần tạo CSDL mô tả (qlquanlysinhvien.db): – Bảng Lớp học (tbllop): tbllop Tên cột Kiểu liệu Mô tả malop TEXT Khóa tenlop TEXT siso INTEGER – Bảng sinh viên (tblsinhvien): tblsinhvien Tên cột Kiểu liệu Mô tả masv TEXT Khóa tensv TEXT malop TEXT khóa ngoại – Để sử dụng SQLite, bạn import thư viện sau: import android.database.sqlite.SQLiteDatabase; —————————————————————————————————— —————1) Cách tạo / xóa sở liệu SQLite Android: – Tạo CSDL: Khi lưu thành công, lưu CSDL vào: /data/data/app/databases/ cụ thể: – Nếu bạn muốn lưu trữ SD Card bắt buộc bạn phải cấp quyền giống đề cập tới trước: – Bạn việc lấy đường dẫn SD Card lưu tên CSDL vào đường dẫn SD Card ok (Bạn tự xem lại tập trước mà Tôi hướng dẫn cách làm) – Xóa CSDL: – Như ta cần gọi lệnh deleteDatabase(tên CSDL) Nếu xóa thành công trả true, xóa thất bại trả false; 2) Cách tạo / xóa bảng SQLite: – Ở bạn tạo bảng tbllop tblsinhvien Chú ý chúng có mối ràng buộc toàn vẹn – Bạn xem cách tạo bảng lớp: – Bạn ý tên đối tượng database (chỗ database.execSQL(sql)) đối tượng SQLiteDatabase tạo bước tạo CSDL Bạn phải khai báo cho phù hợp để hàm truy suất – Tạo bảng sinh viên: – Vì bảng sinh viên có chứa khóa ngoại để tham chiếu tới bảng lớp, nên bạn phải ý dòng lệnh tham chiếu 3) Cách thêm/ sửa/ xóa liệu bảng: – Cách thêm dòng liệu vào bảng: + Dùng đối tượng ContentValues để đưa liệu vào bảng Đối tượng có phương thức put (tên cột , liệu) + Sau gọi phương thức insert để đưa đối tượng (dòng này) vào bảng + Bạn ý phương thức insert có nhiều loại đối số khác nhau, Tôi nói loại đơn giản (các kiểu khác bạn tự tìm hiểu thêm) Loại mà Tôi muốn đề cập tới không liên quan tới kiểm tra điều kiện, cần đưa đối tượng ContentValues vào insert bạn có dòng mới: – Nhìn vào đoạn code trên, bạn thấy Tôi sử dụng cột malop, tenlop, siso bảng lớp học: values.put(“malop“,”DHTH7C”) ; tức đưa giá trị “DHTH7C” vào cột malop – dòng lệnh database.insert(“tbllop“,null,values); Đối số tên bảng, đối số bạn truyền null, đối số bạn truyền đối tượng values – Nếu thêm thành công trả giá trị khác -1 Nếu -1 thất bại – Cách cập nhật liệu: – Ta dùng hàm update để cập nhật liệu theo điều kiện public int update (String table, ContentValues values, String whereClause, String[] whereArgs) – Đối số tên bảng – Đối số đối tượng muốn sửa (với giá trị mới) – Đối số tập điều kiện lọc (dùng dấu chấm hỏi ? để tạo điều kiện lọc) – Đối số tập giá trị điều kiện lọc (lấy theo thứ tự) – Hàm trả số dòng bị ảnh hưởng Ví dụ có dòng bị thay đổi trả dòng bị ảnh hưởng trả Ví dụ: Tôi viết hàm chỉnh sửa (bạn nên tách thành hàm giống vậy): – Hàm : Đối số mã muốn chỉnh sửa Đối số giá trị Cụ thể bảng lớp có cột: mã lớp, tên lớp sĩ số, mà Tôi muốn chỉnh sửa Tên lớp mà Do bạn thấy (ở Tôi chủ ý viết khuyết để bạn hiểu không thiết phải sử dụng hết cột) – Xóa liệu: – Ta dùng hàm delete để xóa: public int delete (String table, String whereClause, String[] whereArgs) – Đối số tên bảng – Đối số tập điều kiện lọc (dùng ? để tạo) – Đối số tập giá trị điều kiện lọc – Hàm trả số dòng bị ảnh hưởng – Muốn xóa toàn liệu bảng ta truyền null vào đối số cuối: – Muốn xóa theo mã đó: 4) Cách truy vấn liệu bảng – Là thao tác phức tạp truy suất SQLite – Ta dùng Cursor để lưu trữ giá trị trả hàm đây: public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String g roupBy, String having, String orderBy) Xem bảng mô tả chi tiết: table The table name to compile the query against columns A list of which columns to return Passing null will return all columns, which is discouraged to prevent reading data from storage that isn’t going to be used selection A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself) Passing null will return all rows for the given table selectionArgs You may include ?s in selection, which will be replaced by the values from selectionArgs, in order that they appear in the selection The values will be bound as Strings groupBy A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself) Passing null will cause the rows to not be grouped having A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself) Passing null will cause all row groups to be included, and is required when row grouping is not being used orderBy How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself) Passing null will use the default sort order, which may be unordered – Ở Tôi làm ví dụ đơn giản truy vấn lọc theo điều kiện cả: – Ví dụ đọc tất danh sách lớp học bảng tbllop: -database.query trả Cursor, Lúc Cursor đầu đọc chưa trỏ tới dòng liệu Do ta phải gọi lệnh moveToFirst để Cursor trỏ đầu đọc tới dòng đầu 10 Giờ bạn kiểm tra ổ đĩa D:/ xem có tập tin hay chưa, có tức backup thành công 2- Đưa file Backup lên Server somee: 153 Ta chọn Restore database, chọn “Choose File“, chọn tập tin vừa backup bấm “Upload the file and restore it“ Chờ báo thành công OK: 154 Để test coi có chạy hay không ta chọn mục “New SQL Query” hình trên, hiển thị cửa sổ cho phép ta nhập câu SQL: 155 – Như hình thành công 3- Tiếp tục ta đưa Webservice lên somee để Test sau: – Dùng Win Zip hệ điều hành Windows, nén lại source code đẩy lên server Dĩ nhiên ta cần sửa chuỗi kết nối lại Như mục Tui nói copy paste chuỗi kết nối : workstation id=dbproductmanager.mssql.somee.com;packet size=4096;user id=drthanh_SQLLogin_1;pwd=7szjt75abq;data source=dbproductmanager.mssql.somee.com;persist security info=False;initial catalog=dbproductmanager Thay cho chuỗi có sẵn máy Local sau (dĩ nhiên bạn tạo chuỗi phải khác bạn phải lấy theo chuỗi bạn): Trong Project Web Service, mở tập tin Web.config thay chuỗi trên: 156 – Sau tiến hành zip sau: – Ở hình ta Ctrl+ A để chọn toàn tập tin thư mục/sau ta bấm chuột phải vào tập tin thư mục chứa source code/ chọn Send to / chọn 157 Compressed… hình bên trên, phát sinh file zip chứa toàn source code (ta chọn tập tin để bấm chuột phải được) – Sau có file zip, ta quay lại hình somee server để đưa source code lên sau: 1- Chọn File Manager/ cửa sổ hiển thị lên chọn nút Upload hình bên dưới: Sau chọn nút Upload xuất cho nút Choose File để đưa file từ client lên Server/ ta chọn file zip lúc bấm Upload and Unzip archives: – Sau bấm Upload and unzip archives ta có kết sau: – Bạn thấy đấy, toàn source code đưa lên server 158 – Bây ta tiến hành kiểm tra Webservice có chạy hay không sau: http://testdrthanh.somee.com/mywebservice.asmx : Như thành công, bạn tiến hành kiểm tra Service Bài tập Tui hướng dẫn chi tiết cách tạo Webservice, cách tạo CSDL, cách đưa liệu lên Server somee, cách sử dụng LinQtoSQL… Bạn cần thực hành nhiều lần cố gắng hiểu Trong tập Tui hướng dẫn bạn cách dùng Android kết hợp với KSOAP API để lấy liệu từ webservice Bài tập quan trọng, hữu ích cho bạn đặc biệt triển khai dự án thực 159 Các bạn tải source code CSDL đây, nhớ đổi lại chuỗi kết nối thử máy tính cá nhân bạn: http://www.mediafire.com/download/xsuou1aakukrlep/Hoc_Webservice.rar 160 Bài 45: Sử dụng Net Webservice C# Trong tập 45 này, Tui dùng C# để lấy liệu từ server thông qua service cung cấp tập 44 Vậy bạn chưa xem tập 44 bắt buộc phải xem lại Lý Tui dùng C# trước để bạn dễ tưởng tượng cách thức lấy liệu Webservice trước dùng KSOAP API Android để tương tác (vì tui cảm thấy khó xí) Từ WebProject tập 44, bạn tạo thêm Windows Form Project để lấy liệu từ Service sau: – Khi bấm Nút “Get List Catalog”: Chương trình triệu gọi web service (hàm getListCatalog) lưu http://testdrthanh.somee.com/mywebservice.asmx hiển thị vào ListBox (listbox_cate) – Khi chọn Catalog listbox_cate hiển thị danh sách sản phẩm thuộc danh mục chọn vào listbox_product – Khi bấm nút “Delete Selected Product”: Sẽ xóa Product chọn listbox_product Sau cách lấy liệu từ webservice trên: 1- Bấm chuột phải vào Project/ chọn Add Service Reference: 161 2- Màn hình chọn WebService hiển thị bên đây: 3- Bấm chọn nút “Advanced“: 162 4- Ở hình ta chọn “Add Web Reference…“: 163 Mục số 1: Ta copy dán đường dẫn webservice vào Mục số đặt tên cho Web Reference nhấn nút “Add Reference“ Sau bạn nhấn nút “Add Reference” Project thay đổi sau: 164 File app.config tự động xuất bên có thông tin sau: – Bây ta tiến hành Coding cho control giao diện sau: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms; namespace TestWebService { public partial class Form1 : Form { public Form1() { InitializeComponent(); } bool isFinish = false; com.somee.testdrthanh.mywebservice test = new com.somee.testdrthanh.mywebservice(); //Nút hiển thị danh sách Catalog private void button1_Click(object sender, EventArgs e) { isFinish = false; List listCate = test.getListCatalog().ToList(); listbox_cate.DataSource = listCate; listbox_cate.DisplayMember="CateName"; listbox_cate.ValueMember="CateId"; isFinish = true; } //xử lý hiển thị danh sách sản phẩm theo danh mục private void listbox_cate_SelectedIndexChanged(object sender, EventArgs e) { 165 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 if (!isFinish) return; if (listbox_cate.SelectedItem != null) { com.somee.testdrthanh.Catalog cate = listbox_cate.SelectedItem com.somee.testdrthanh.Catalog; List listProduct = test.getListProductByCatalogId(cate.CateId).ToList(); listbox_product.DataSource = listProduct; listbox_product.DisplayMember = "ProductName"; listbox_product.ValueMember = "ProductId"; } } //xử lý nút xóa Product private void button2_Click(object sender, EventArgs e) { if (listbox_product.SelectedItem == null) return; DialogResult ret = MessageBox.Show("Muốn xóa Product hả?", xóa", MessageBoxButtons.YesNo); if (ret == DialogResult.Yes) { com.somee.testdrthanh.Product p = listbox_product.SelectedItem com.somee.testdrthanh.Product; bool isDelete= test.deleteProduct(p.ProductId); if (isDelete) { com.somee.testdrthanh.Catalog cate = listbox_cate.SelectedItem com.somee.testdrthanh.Catalog; List listProduct = test.getListProductByCatalogId(cate.CateId).ToList(); listbox_product.DataSource = listProduct; listbox_product.DisplayMember = "ProductName"; listbox_product.ValueMember = "ProductId"; } else { MessageBox.Show("Không xóa được"); } } } } } Khi thực thi ta có kết sau: 166 as "Xác nhận as as – Bạn cố gẳng thử cho hết Servive cung cấp – Các bạn tải source code CSDL đây: http://www.mediafire.com/download/9dubk49ukme269k/code_bai44_bai45.rar – Bài tập sau bạn học cách lấy liệu từ Web Service thự viện KSOAP API Android 167 ... import android. os.Bundle; import android. app.Activity; import android. content.Intent; 23 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44... } 21 2 23 224 225 226 227 228 229 230 231 232 233 234 235 – XML source thêm tác giả activity_create_author.xml: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35