intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Hướng dẫn lập trình cơ bản với Android - Bài 7

Chia sẻ: Ha Ngoc Chung | Ngày: | Loại File: PDF | Số trang:11

192
lượt xem
91
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 ).

Chủ đề:
Lưu

Nội dung Text: Hướng dẫn lập trình cơ bản với Android - Bài 7

  1. 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
  2. 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
  3. www.Beenvn.com – T Sách Online
  4. 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
  5. 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
  6. 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
  7. @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
  8. 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
  9. 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
  10. 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
  11. =================================================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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2