35
Content Provider www.mobilepro.vn Professional Programming

Content Provider

Embed Size (px)

DESCRIPTION

Cung cap noi dung

Citation preview

Page 1: Content Provider

Content Provider

www.mobilepro.vnProfessional Programming

Page 2: Content Provider

Nội dung• Content Provider là gì?• Mô hình dữ liệu• URIs• Truy vấn với Content Provider• Thay đổi dữ liệu Content Provider• Tạo 1 Content Provider

Page 3: Content Provider

Content Provider là gì?• Có thể hiểu ContentProvider theo 2 cách :

– Là kho dữ liệu mà tất cả các ứng dụng có thể truy cập vàsử dụng ( lưu trữ, đọc, ghi..) như Contacts, Browser, CallLog

– Là cách duy nhất để các ứng dụng chia sẽ dữ liệu vớinhau

• Có 2 loại Content Provider– Content Provider có sẵn của hệ thống– Content Provider do người dùng tự định nghĩa

Page 4: Content Provider

ContentProvider có sẵn • Hệ điều hành Android đi kèm với 1 kho dữ liệu

dưới dàng ContentProvider– Chủ yếu là các dữ liệu dưới dạng Audio, video,

images, contacts, info…– Nằm trong gói android.provider

• Người dùng có thể sử dụng các câu truy vấn để lấy dữ liệu EL9DemoCP

Page 5: Content Provider

Kho dữ liệu ContentProvider

EL9DemoCP

Page 6: Content Provider

Làm sao để public dữ liệu?• Có 2 cách:

– Tạo riêng dữ liệu dưới dạng ContentProvider ( hướng dẫn sau )

– Thêm dữ liệu vào các provider có sẵn ( lưu ý phải cùng kiểu dữ liệu ) và phải thêm permission để ghi dữ liệu vào provider đó

Page 7: Content Provider

ContentProvider Implementation• Tất cả các lớp ContentProvider đều phải implement ( thực

thi ) 1 interface giống nhau để:– Truy vấn các provider và trả lại dữ liệu– Thêm dữ liệu– Xóa dữ liệu– Chỉnh sửa dữ liệu

• Dữ liệu ContentProvider có thể lưu trữ dưới dạng File hệ thống hoặc SQLite

• Client truy cập dữ liệu ContentProvider thông qua lớp ContentResolver

Page 8: Content Provider

Demo tại lớp• Tạo 1 Content Provider cho 1 cơ sở dữ liệu

chứa các đối tượng Book . Mô tả : – Đối tượng Book gồm 2 thuộc tính : id & tittle– Content Provider sử dụng SQLite Database để

chứa dữ liệu.– Thực hiện các thao tác thêm, sửa, xóa, truy vấn…

Page 9: Content Provider

Bài tập tại lớp• Từ 1 ứng dụng khác , truy vấn dữ liệu Book đã

tạo từ Demo trước đó. VD : Show Toast hiểnthị tên đối tượng sách đầu tiên.

• Chú ý : Đã override phương thức query() củaBookProvider.

Page 10: Content Provider

Mô hình dữ liệu Content Provider

Page 11: Content Provider

Mô hình dữ liệu• Cấu trúc dữ liệu ContentProvider dưới dạng các

bảng ( giống như database)– Mỗi hàng là 1 bản ghi , mỗi cột là 1 trường ( thuộc

tính) – Mỗi bản ghi đều có trường _ID để phân biệt với các

bản ghi khác

Page 12: Content Provider

Dữ liệu Cursor• Dữ liệu trả lại khi truy vấn với ContentProvider dưới

dạng Cursor• Sử dụng các phương thức move(int Offset) ,

moveToFirst(), moveToLast(), moveToNext(), moveToPosition(int Position)… để duyệt Cursor

• Để lấy được dữ liệu từ Cursor , bắt buộc phải lấy được columnIndex và biết được kiểu của dữ liệu, sau đó sử dụng các phương thức : getDouble(int columnIndex), getString(int columIndex), ….) để lấy dữ liệu

Page 13: Content Provider

URIs

Page 14: Content Provider

URI• Dữ liệu ContentProvider được “show” thông qua

URI ( 1 chuỗi String trỏ đến dữ liệu CP)• Tất cả các URIs trỏ đến dữ liệu ContentProvider

đều bắt đầu với chuỗi “content://”

Page 15: Content Provider

System URIs• Android định nghĩa hằng số CONTENT_URI cho

tất cả các provider có sẵn trong hệ thống• Ví dụ : URI cho bảng chứa dữ liệu số điện thoại

trong danh bạ và URI cho bảng dữ liệu chứa ảnh các bản ghi trong danh bạ:

Page 16: Content Provider

Cấu trúc 1 URI

• A : Tiền tố bắt buộc đánh dấu đây là 1 URI trỏ đến dữ liệu CP -> Không được sửa

• B : Đường dẫn đến kho dữ liệu CP -> Duy nhất• C : Tên bảng dữ liệu được yêu cầu• D : ID của bản ghi cần lấy

Page 17: Content Provider

1 số ContentURI• Contact : ContactsContract.Contacts.CONTENT_URI• Setting : System.Setting.CONTENT_URI• Call Logs : CallLog.Calls.CONTENT_URI• Browser Bookmarks : Browser.BOOKMARKS_URI

• => Chú ý : Cần đăng ký permission trước khi sử dụng.

Page 18: Content Provider

Truy vấn 1 ContentProvider

Page 19: Content Provider

Truy vấn ContentProvider• Cần 3 thông tin sau để truy vấn 1 CP:

– URI trỏ đến CP đó– Tên bảng dữ liệu muốn lấy– Kiểu dữ liệu của các thuộc tính ( để lấy dữ liệu từ

Cursor ra )

• Nếu truy vấn để lấy 1 bản ghi thì cần biết ID của bản ghi đó.

Page 20: Content Provider

Ví dụ truy vấn 1 bảng

Page 21: Content Provider

Ví dụ truy vấn 1 bản ghi

• Cần biết được ID của bản ghi• Có thể sử dụng các phương thức hỗ trợ :

Page 22: Content Provider
Page 23: Content Provider

Đọc dữ liệu từ Cusror

Page 24: Content Provider

Thay đổi dữ liệu ContentProvider

Page 25: Content Provider

• Các chức năng hay sử dụng:– Thêm bản ghi mới– Update dữ liệu cho các trường của bản ghi đã tồn tại– Xóa bản ghi

• Bắt buộc phải sử dụng các phương thức của lớp Content Resolver

Page 26: Content Provider

Các bước thêm bản ghi mới• Khởi tạo 1 đối tượng của lớp ContentValues để chứa dữ

liệu các trường tương ứng ( sử dụng phương thức put ( COLUMN, DATA) )

• Sử dụng phương thức ContentResolover().insert() để thêm dữ liệu vào bảng

Page 27: Content Provider

Update dữ liệu• Sử dụng phương thức ContentResolover.update()

Page 28: Content Provider

Xóa bản ghi• Xóa 1 bản ghi :

– Sử dụng phương thức ContentResolver.delete() với URI của 1 bản ghi truyền vào.

• Xóa nhiều bản ghi :– Vẫn sử dụng phương thức ContentResolver.delete()

nhưng với URI trỏ đến bảng dữ liệu.VD: android.provider.Contacts.People.CONTENT_URI– Ngoài ra sử dụng thêm mệnh đề WHERE trong SQL để

xác định xem những bản ghi nào muốn xóa.

Page 29: Content Provider

Tạo 1 content provider

Page 30: Content Provider

Các bước tạo ContentProvider• Tạo hệ thống lưu trữ dữ liệu ContentProvider

– > Recommended : Sử dụng SQLite• Tạo 1 lớp extends từ lớp ContentProvider để

thao tác với các phương thức truy cập dữ liệu– Implement 6 phương thức : query(), insert(),

update(), delete(), getType(), onCreate()• Khai báo content provider của ứng dụng trong

AndroidManifest.xml

Page 31: Content Provider

Khai báo ContentProvider• Mục đích để hệ thống biết content provider mà

bạn xây dựng.• Khai báo trong AndroidManifest.xml sử dụng tag

<provider>

Page 32: Content Provider

Homework 1• Viết 1 ứng dụng bao gồm 2 activity :

– Activity 1 : Có tên là ContactList.java • Là 1 ListActivity , hiển thị list các danh bạ trong máy. • Khi click vào 1 item trong list sẽ chuyển sang Activity 2.

– Activity 2 : Có tên là ContactEditor.java • Là 1 form chứa giao diện để sửa các thông tin của 1 danh bạ.• Hiển thị dữ liệu của danh bạ tương ứng từ Activity 1 gửi sang ( Bao gồm Tên,

Email, Số điện thoại, avatar… )• Sau khi sửa xong, người dùng click vào button Save để lưu lại, dữ liệu được

update . Chú ý kiểm tra bằng cách mở lại danh bạ trong máy xem thông tin đượcsửa thành công hay chưa.

• Gợi ý : ContentURI của Contact : ContactsContract.Contacts.CONTENT_URI

Page 33: Content Provider

Chọn giao diện ContactList.java

Click item -> chuyển sang DetailActivityCustom listview Custom listview

Page 34: Content Provider

Chọn giao diện ContacEditor

Page 35: Content Provider

Homework2

• Viết 1 ứng dụng hiển thị list các note có trong ứng dụng Notepad ( đã làm từ buổi trước ).