• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[Basic4Android] Bài 16 - Lớp thư viện ContentResolver

Lập trình cho Android Phone

Điều hành viên: tummosoft

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

[Basic4Android] Bài 16 - Lớp thư viện ContentResolver

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 8:59 am

Nếu như ContentProvider là thành phần bao gồm nhiều table chứa các thông tin cơ sở thì ContentResolver là lớp thư viện giúp ta thao tác trên các table đó.

Thông qua đường dẫn URI quy ước cho mỗi table, bằng việc sử dụng SQL ta có thể xem, sửa, xóa các row trên mỗi table.

Ví dụ URI : content://com.android.contacts/contacts -> đường dẫn trỏ đến table chứa các thông tin về danh bạ đã có trong điện thoại.

Đoạn code dưới đây sẽ truy vấn vào table “contacts”, với điều kiện lọc “display_name = Bui Giang”, xem ID này có số điện thoại hay không.

* Lưu ý:
- Ví dụ sử dụng thư viện SQL, ContentResolver

- Đồng thời bạn cần thêm quyền truy cập vào tập tin manifest
+ Nếu sử dụng Manifest Editor thì thêm dòng:AddPermission("android.permission.READ_CONTACTS")
+ Hoặc mở trực tiếp tập tin AndroidManifest.xml từ Notepad, thêm dòng:
<uses-permission android:name="android.permission.READ_CONTACTS"/>

1- Khai báo ContentResolver trong “Sub Process_Globals” (không phải “Sub Globals”)

Sub Process_Globals
Private cr As ContentResolver
End Sub


2- Khởi động biến ContentResolver

If FirstTime Then
cr.Initialize("cr")
End If


3- Khai báo và sử dụng đường dẫn Uri cho table contacts

Dim smsUri As Uri
smsUri.Parse("content://com.android.contacts/contacts")


4- Tìm kiếm display_name là Bui Giang

Dim address As String = "Bui Giang"
Dim crsr As Cursor = cr.Query(smsUri, Array As String("display_name", "has_phone_number"), "display_name LIKE ?", _
Array As String("%" & address & "%"), "")


5- Áp dữ liệu vừa tìm kiếm vào Listview

For i = 0 To crsr.RowCount - 1
crsr.Position = i
Dim names As String = crsr.GetString("display_name")
Dim phones As String = crsr.GetString("has_phone_number")
ListView1.AddTwoLines(names, phones)
Next
crsr.Close


6- Toàn bộ code của ví dụ

  1. Sub Process_Globals
  2. 'These global variables will be declared once when the application starts.
  3. 'These variables can be accessed from all modules.
  4. Private cr As ContentResolver
  5.  
  6. End Sub
  7.  
  8. Sub Globals
  9. 'These global variables will be redeclared each time the activity is created.
  10. 'These variables can only be accessed from this module.
  11.  
  12. Private ListView1 As ListView
  13. Private Label1 As Label
  14. End Sub
  15.  
  16. Sub Activity_Create(FirstTime As Boolean)
  17. 'Do not forget to load the layout file created with the visual designer. For example:
  18. Activity.LoadLayout("main")
  19. If FirstTime Then
  20. cr.Initialize("cr")
  21. End If
  22. Dim smsUri As Uri
  23. smsUri.Parse("content://com.android.contacts/contacts")
  24. Dim address As String = "Bui Giang"
  25. Dim crsr As Cursor = cr.Query(smsUri, Array As String("display_name", "has_phone_number"), "display_name LIKE ?", _
  26. Array As String("%" & address & "%"), "")
  27. For i = 0 To crsr.RowCount - 1
  28. crsr.Position = i
  29. Dim names As String = crsr.GetString("display_name")
  30. Dim phones As String = crsr.GetString("has_phone_number")
  31. 'Log(tid)
  32. 'Log(crsr.GetString("body"))
  33. ListView1.AddTwoLines(names, phones)
  34. Next
  35. crsr.Close
  36. 'UpdateStarred("John", True)
  37. ' "times_contacted", "last_time_contacted", "display_name", "has_phone_number", "starred", "_id", "photo_id"
  38.  
  39. End Sub
  40.  
  41. Sub Activity_Resume
  42.  
  43. End Sub
  44.  
  45. Sub Activity_Pause (UserClosed As Boolean)
  46.  
  47. End Sub


:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

Re: [Basic4Android] Bài 16 - Lớp thư viện ContentResolver

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 9:03 am

Phần contacts có 3 table chính và các table phụ như: Groups, StatusUpdates, AgreegationExceptions, Settngs, SyncState and PhoneLookUp.

- ContactsContract.Data : http://developer.android.com/reference/ ... .Data.html

Hình ảnh

- ContactsContract.RawContacts : http://developer.android.com/reference/ ... tacts.html

Hình ảnh

- ContractsContract.Contacts : http://developer.android.com/reference/ ... tacts.html

Hình ảnh

Và 3 Uri để kết nối đến các table đó là

- Contacts Table:
content://com.android.contacts/contacts
content://com.android.contacts/contacts/#
content://com.android.contacts/contacts/#/data

- Raw_Contacts Table:
content://com.android.contacts/raw_contacts
content://com.android.contacts/raw_contacts/#
content://com.android.contacts/raw_contacts/#/data

- Data Table:
content://com.android.contacts/data
content://com.android.contacts/data/#
content://com.android.contacts/data/phones
content://com.android.contacts/data/phones/#
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

Re: [Basic4Android] Bài 16 - Lớp thư viện ContentResolver

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 9:06 am

Sau đây là code hiển thị tất cả danh sách contacts bằng cách truy cập Uri content://contacts/people

  1. If FirstTime Then
  2.       cr.Initialize("cr")
  3.    End If
  4.    Dim smsUri As Uri
  5.    smsUri.Parse("content://contacts/people")
  6.    Dim address As String = "" ' Hiện thị tất cả contact trong danh sách
  7.    Dim crsr As Cursor = cr.Query(smsUri, Array As String("display_name"), "display_name LIKE ?", _
  8.       Array As String("%" & address & "%"), "")
  9.    For i = 0 To crsr.RowCount - 1
  10.       crsr.Position = i
  11.       Dim names As String = crsr.GetString("display_name")
  12.       'Dim phones As String = crsr.GetString("has_phone_number")
  13.       'Log(tid)
  14.       'Log(crsr.GetString("body"))
  15.       ListView1.AddTwoLines(names,"Test")
  16.    Next
  17.    crsr.Close


Hình ảnh
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

Re: [Basic4Android] Bài 16 - Lớp thư viện ContentResolver

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 3:01 pm

Các đối tượng của lớp thư viện ContentResolver

Đối tượng ContentResolver

* Các sự kiện:

- QueryCompleted (Success As Boolean, Crsr As Cursor)

- InsertCompleted (Success As Boolean, Uri As Uri)

- UpdateCompleted (Success As Boolean, RowsAffected As Int)

- DeleteCompleted (Success As Boolean, RowsAffected As Int)

* Các thành phần:

- Delete (Uri As android.net.Uri, Where As String, SelectionArgs() As String) As Int

Xóa một row với đường dẫn Uri, điều kiện Where, giá trị SelectionArgs

Ex: cr.Delete(u, "raw_contact_id = ?", Array As String(rawId))

- Initialize (EventName As String)

Khởi động một biến ContentResolver

- Insert (Uri As Uri, Values As android.content.ContentValues) As Uri

Thêm một dòng

Ex:
uri1.Parse("content://com.android.contacts/data")
values.Initialize
values.PutLong("raw_contact_id", rawContactId)
values.PutString("mimetype", "vnd.android.cursor.item/phone_v2")
values.PutString("data1", Phone)
cr.Insert(uri1, values)


- InsertAsync (Uri As Uri, Values As android.content.ContentValues)

Thêm một rows và trả về sự kiện InsertCompleted khi hoàn thành.

- Query (Uri As Uri, Projection() As String, Selection As String, SelectionArgs() As String, SortOrder As String) As CursorWrapper

Truy vấn một content provider.

Ex: Dim crsr As Cursor = cr.Query(u, Array As String("_id", "raw_contact_id"), _
"mimetype = ? AND data1 = ?", Array As String("vnd.android.cursor.item/name", Name), ""


- QueryAsync (Uri As Uri, Projection() As String, Selection As String, SelectionArgs() As String, SortOrder As String)

- Update (Uri As android.net.Uri, Values As android.content.ContentValues, Where As String, SelectionArgs() As String) As Int

- UpdateAsync (Uri As android.net.Uri, Values As android.content.ContentValues, Where As String, SelectionArgs() As String)

- UpdateDelete (Uri As android.net.Uri, Where As String, SelectionArgs() As String)
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

Re: [Basic4Android] Bài 16 - Lớp thư viện ContentResolver

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 3:05 pm

Đối tượng ContentValues

Đối tượng ContentValues giữ và truyền các giá trị đến Content Provider

- Initialize

- IsInitialized As Boolean

- PutBoolean (Key As String, Value As Boolean)

- PutByte (Key As String, Value As Byte)

- PutBytes (Key As String, Value() As Byte)

- PutDouble (Key As String, Value As Double)

- PutFloat (Key As String, Value As Float)

- PutInteger (Key As String, Value As Int)

- PutLong (Key As String, Value As Long)

- PutNull (Key As String)

- PutShort (Key As String, Value As Short)

- PutString (Key As String, Value As String)

- Remove (Key As String)
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 332
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 59 time
Liên hệ:

Re: [Basic4Android] Bài 16 - Lớp thư viện ContentResolver

Gửi bàigửi bởi tummosoft » T.Bảy 02/08/2014 3:10 pm

Đối tượng Uri

- FromParts (Scheme As String, SSP As String, Fragment As String)

- IsInitialized As Boolean


- Parse (UriString As String): Tạo mới một Uri từ giá trị UriString

- ParseId As Long: Trả về ID của Uri hiện tại

- WithAppendedId (BaseUri As android.net.Uri, Id As Long) : Tạo mới một Uri với số ID được cấp

- WithAppendedPath (BaseUri As android.net.Uri, PathSegment As String) : Tạo mới một Uri với Path được cấp
:) Tummo Software :D
http://tummosoft.com


Quay về “Android”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách