Hướng dẫn lập trình cơ bản với Android - Bài 7
lượt xem 91
download
Một Content Provider cung cấp một tập chi tiết dữ liệu ứng dụng đến các ứng dụng khác. Thường được sử dụng khi chúng ta muốn tạo cơ sở dữ liệu dưới dạng public (các ứng dụng khác có thể truy xuất ).
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Hướng dẫn lập trình cơ bản với Android - Bài 7
- Hư ng d n l p trình cơ b n v i Android - Bài 7 : Content Provider http://diendan.vietandroid.com/cac-bai-hoc-co-kem-ma-nguon/1107-huong- Reflink: dan-lap-trinh-co-ban-voi-android-bai-7-content-provider.html List tutorial Bài 0 - Cài ñ t và s d ng Android v i Eclipse Bài 1 - Cơ b n Android Bài 2 - Xây d ng giao di n ñơn gi n Bài 3 - ViewGroup và Custom Adapter Bài 4 - Intent và Broadcast Receiver Bài 5 - Service Bài 6 - SQLite Bài 7 - Content Provider Bài 8 : Thread & Handler (Coming soon) Bài 7 : Android Content Provider Cu i tu n r nh r i hơn, nh ra là ph i ti p t c vi t Tutorial cho di n ñàn, r t nhi u các Newbies ñang c n t i ñây Trư c khi vào bài, các b n down Sourcecode c a bài h c Sourcecode c a bài h c bao g m 3 Project demo : ContentProviderDemo ContentProviderDemo1 ContentProviderDemo2 M i Demo s gi i quy t t ng v n ñ c a Tutorial. Các b n c add h t vào workspace ñ ti n theo dõi. 1. Gi i thi u Content Provider Content Provider là 1 trong 4 thành ph n cơ b n c a 1 ng d ng Android thư ng có bao g m: 1. Activity 2. Service 3. Broadcast Receiver 4. Content Provider M t Content Provider cung c p m t t p chi ti t d li u ng d ng ñ n các ng d ng khác. Thư ng ñư c s d ng khi chúng ta mu n t o cơ s d li u dư i d ng public (các ng d ng khác có th truy xu t ). D li u thư ng ñư c lưu tr file h th ng, ho c trong m t SQLite database. ðơn gi n ñ các b n có th hình dung như : Danh b , Call log, c u hình cài ñ t...trên ñi n tho i là d li u dư i d ng Content Provider. Content Provider hi n th c m t t p phương th c chu n mà các ng d ng khác có th truy xu t và lưu tr d li u c a lo i nó ñi u khi n. Tuy nhiên, nh ng ng d ng không th g i các phương th c tr c ti p. Hơn th chúng dùng l p Content Resolver và g i nh ng phương th c ñó. M t Content Resolver có th giao ti p ñ n nhi u content provider; nó c ng tác v i các provider ñ qu n lý b t kỳ giao ti p bên trong liên quan. ðơn gi n hơn, chúng ta có th làm 1 ng d ng nh ñ l y t t c các thông tin c u hình trong www.Beenvn.com – T Sách Online
- máy load lên listview. Các b n có th ch y Project ContentProviderDemo1 trong SourcecodeDemo. www.Beenvn.com – T Sách Online
- www.Beenvn.com – T Sách Online
- Chúng ta có th tìm hi u sơ qua v code c a demo này, r t ng n g n Mã: ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(Settings.System.CONTENT_URI, null, null, null, null); startManagingCursor(cursor); ListView listView = (ListView) findViewById(R.id.listView); String[] from = { Settings.System.NAME, Settings.System.VALUE }; int[] to = { R.id.textName, R.id.textValue }; SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to); listView.setAdapter(adapter); Như các b n th y, ch c n 2 dòng code ñơn gi n ñ l y ñư c con tr thao tác trên t p d li u c n l y: Mã: ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(Settings.System.CONTENT_URI, null, null, null, null); www.Beenvn.com – T Sách Online
- L p Content Resolver cung c p các phương th c x lý d li u thông qua các Uri, m i Content Provider có 1 Uri c th , ñây Uri Settings.System.CONTENT_URIs tr l i t p d li u là thông tin c u hình c a thi t b . Sau khi l y ñư c con tr t i t p d li u, vi c còn l i ñơn gi n là bind data lên listview ñ hi n th : Mã: startManagingCursor(cursor); ListView listView = (ListView) findViewById(R.id.listView); String[] from = { Settings.System.NAME, Settings.System.VALUE }; int[] to = { R.id.textName, R.id.textValue }; SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to); listView.setAdapter(adapter) 2. T o và s d ng 1 Content Provider do ngư i dùng t ñ nh nghĩa ð d hi u hơn các b n m Project ContentProviderDemo trong Sourcecode ñã down v . Trong Project ñó mình t o 1 Content Provider Books, m i b n ghi Book bao g m 2 trư ng : ID và Title. Sau ñây là các bư c ñ t o 1 Content Provider cơ b n ( c th là t o ContentProvider Book) 1. T o 1 class th a k l p ContentProvider Mã: public class BookProvider extends ContentProvider 2. ð nh nghĩa 1 bi n Uri (public static final ) ñư c g i CONTENT_URI. Các xâu này luôn ñư c b t ñ u b ng “content://” ti p theo ñó là n i dung c a mà ContentProvider x lý. Xâu này ph i có ñ c tính là duy nh t. Mã: public static final String PROVIDER_NAME = "com.vietandroid.provider.Books"; public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/books"); 3. Khai báo các xâu ñ ñ nh nghĩa cho t ng thu c tính tương ng v i các c t giá tr t Cursor. Mã: public static final String _ID = "_id"; public static final String TITLE = "title"; 4. Chúng ta c n t o h th ng ch a d li u cho ContentProvider, có th chưa dư i nhi u hình th c : s d ng XML, thông qua CSDL SQLite, hay th m chí là WebService. Trong Demo này chúng ta s d ng cách ph bi n nh t ñó là SQLite: Mã: private SQLiteDatabase bookDB; private static final String DATABASE_NAME = "Books"; private static final String DATABASE_TABLE = "titles"; private static final int DATABASE_VERSION = 1; 5. ð nh nghĩa tên c a các c t mà chúng ta s tr l i giá tr cho các clients.N u chúng ta ñang s d ng Database ContentProvider hay các l p SQLiteOpenHelper, tên các c t này chính là id c a các c t trong cơ s d li u SQL. Trong trư ng h p này, chúng ta ph i g p c c t có giá tr là s nguyên ñư c g i “_id” ñ ñ nh nghĩa id c a m i b n ghi. N u ñang s d ng cơ s d li u SQLite, nó s là INTEGER PRIMARY KEY AUTOINCREMENT. Tùy ch n AUTOINCREMENT không b t bu c, có tác d ng t ñ ng tăng ID c a m i b n ghi lên n u ngư i dùng không nh p. Android cung c p www.Beenvn.com – T Sách Online
- SQLiteOpenHelper giúp t o và qu n lý các phiên b n c a cơ s d li u. Mã: private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE + " (_id integer primary key autoincrement, " + "title text not null);"; private static class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { super(context, DATABASE_NAME , null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS titles"); onCreate(db); } } 6. N u chúng ta mu n public các d li u ki u byte như bitmap thì các trư ng mà ch a d li u này nên là m t xâu v i 1 content://URI cho file ñó. ðây chính là liên k t ñ các ng d ng khác có th truy c p và s d ng d li u bitmap này. 7. S d ng Cursor ñ thao tác trên t p d li u : query (), update(), insert(), delete()….. Có th g i phương th c ContentResolver.notifyChange() ñ bi tkhi nào d li u ñư c c p nh t. Add Book Mã: @Override public Uri insert(Uri uri, ContentValues values) { long rowID = bookDB.insert(DATABASE_TABLE, "", values); if(rowID > 0) { Uri mUri = ContentUris.withAppendedId(CONTENT_URI, rowID); getContext().getContentResolver().notifyChange(mUri, null); return mUri; } throw new SQLException("Failed to insert new row into " + uri); } Get All Books Mã: www.Beenvn.com – T Sách Online
- @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder(); sqlBuilder.setTables(DATABASE_TABLE); if(uriMatcher.match(uri) == BOOK_ID) sqlBuilder.appendWhere(_ID + "=" + uri.getPathSegments().get(1)); if(sortOrder == null || sortOrder == "") sortOrder = TITLE; Cursor c = sqlBuilder.query(bookDB, projection, selection, selectionArgs, null, null, sortOrder); c.setNotificationUri(getContext().getContentResolver(), uri); return c; } } Mình ch demo 2 ch c năng là thêm sách và l y toàn b b n ghi trong CSDL , ngoài ra các phương th c edit, s a , update, xóa... các b n có th t làm . 8. Khai báo Content Provider trong file AndroidManifest.xml Mã: Như v y chúng ta ñã t o xong ContentProvider Book t ñ nh nghĩa. 9. Test th thành qu : M i content Provider g n v i 1 Uri c th , như trên thì ContentProvider Book có Uri là: Mã: com.vietandroid.provider.Books/books ð test th , v n trong Project Demo ContentProviderDemo , các b n có th thêm 2 Button Add Book và View All Books vào . Giao di n như sau: www.Beenvn.com – T Sách Online
- Chúng ta s thêm 1 Book vào CSDL thông qua URI này: Mã: public void addBook(String title) { ContentValues values = new ContentValues(); values.put(BookProvider.TITLE, title); Uri uriInsert = getContentResolver().insert(BookProvider.CONTENT_URI, values); if(uriInsert != null) { Toast.makeText(this, "Book's added", Toast.LENGTH_SHORT).show(); } Log.d(getClass().getSimpleName(),uriInsert.toString()); } K t qu : www.Beenvn.com – T Sách Online
- Truy v n toàn b d li u Books có trong CSDL Mã: public void getAllBooks() { Uri uriGetListTitles = Uri.parse("content://com.vietandroid.provider.Books/books"); Cursor c = managedQuery(uriGetListTitles, null, null, null, "title desc"); if(c.moveToFirst()){ do{ String bookRecord = "ID = " + c.getString(c.getColumnIndex(BookProvider._ID)) + " Title = " + c.getString(c.getColumnIndex(BookProvider.TITLE)); Toast.makeText(this, bookRecord , Toast.LENGTH_LONG).show(); }while(c.moveToNext()); } } K t qu : [IMGhttp://i123.photobucket.com/albums/o286/firewall7845/VietAndroid/2-1.png[/IMG] 3. S d ng d li u Content Provider t 1 ng d ng b t kỳ www.Beenvn.com – T Sách Online
- Bài 6 mình ñã ñ c p v cơ s d li u SQLite Database, d ng d li u này không public cho các ng d ng khác s d ng, d li u c a ng d ng nào thì ng d ng ñó s d ng. 1 l i th c a d li u dư i d ng Content Provider là public, t t c các ng d ng ñ u có th truy c p và s d ng. Ph n này các b n s d ng ProjectDemo là ContentProviderDemo2 trong sourcecode ñi kèm ban ñ u. Demo này ch ñơn gi n là ñ c l i toàn b d li u trong CSDL Books ñư c t o trong ph n 2. Như mình ñã nói trên, ch c n l y ñư c Uri c a ContentProvider c n l y và các tên c a các trư ng d li u thì chúng ta có th truy v n ñư c h t. Trong hàm onCreate() các b n thêm vào: Mã: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Uri uriGetListTitles = Uri.parse("content://com.vietandroid.provider.Books/books"); Cursor c = managedQuery(uriGetListTitles, null, null, null, "title desc"); if(c != null) { if(c.moveToFirst()){ do{ String bookRecord = "ID = " + c.getString(c.getColumnIndex("_id")) + " Title = " + c.getString(c.getColumnIndex("title")); Toast.makeText(this, bookRecord , Toast.LENGTH_LONG).show(); }while(c.moveToNext()); } } else { Toast.makeText(this, "Database is emtpy", Toast.LENGTH_SHORT).show(); } } 2 trư ng d li u ñây ñư c ñ nh nghĩa trên là "_id" và "title". Ph n truy v n v n như v y. K t qu : www.Beenvn.com – T Sách Online
- =================================================H T=========================================== Như v y, mình ñã trình bày T ng quan và r t chi ti t v Content Provider , cách s d ng cũng không khó. M i th c m c trong quá trình h c bài này các b n có th post dư i , mình s tr l i s m nh t có th Bài ti p theo s là Thread & Handler. www.Beenvn.com – T Sách Online
CÓ THỂ BẠN MUỐN DOWNLOAD
-
HƯỚNG DẪN LẬP TRÌNH CƠ BẢN ANDROID (TIẾNG VIỆT)
121 p | 1039 | 355
-
Hướng dẫn lập trình cơ bản với Android
121 p | 586 | 277
-
Hướng dẫn lập trình cơ bản và nâng cao với Android 1
5 p | 879 | 264
-
Hướng dẫn lập trình với Android 8
5 p | 351 | 180
-
Hướng dẫn lập trình cơ bản với Android - Bài 1
12 p | 336 | 135
-
Hướng dẫn lập trình cơ bản và nâng cao với Android 4
5 p | 251 | 113
-
Hướng dẫn lập trình với Android
145 p | 357 | 105
-
Hướng dẫn lập trình cơ bản và nâng cao với Android 18
6 p | 246 | 105
-
Hướng dẫn lập trình cơ bản và nâng cao với Android 10
5 p | 194 | 99
-
Hướng dẫn lập trình cơ bản và nâng cao với Android 16
7 p | 204 | 88
-
Hướng dẫn lập trình cơ bản và nâng cao với Android 21
5 p | 176 | 85
-
Hướng dẫn lập trình cơ bản với Android - Phần 2: Android Virtual Device
5 p | 206 | 24
-
Hướng dẫn lập trình cơ bản với Android - Phần 3: Device của Android
5 p | 119 | 14
-
Giáo trình hướng dẫn lập trình cơ bản với hệ điều hành mở Androi 3.1 p1
5 p | 105 | 13
-
Hướng dẫn lập trình cơ bản với Android - Phần 1: Cách sử dụng Android trong Eclipse
5 p | 105 | 9
-
Giáo trình hướng dẫn lập trình cơ bản với hệ điều hành mở Androi 3.1 p8
5 p | 113 | 8
-
Hướng dẫn lập trình cơ bản với Android - Phần 4: Android Activity Life Cycle
5 p | 55 | 5
-
Hướng dẫn lập trình cơ bản với Android - Phần 6: Bài tập thực hành
5 p | 64 | 5
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn