Microsoft Word - content_provider_trong_android.docx

Tài liệu tương tự
Microsoft Word - edittext_trong_android.docx

Microsoft Word - custom_font_trong_android.docx

Microsoft Word - mot_so_ung_dung_android_co_ban.docx

Microsoft Word - auto_complete_trong_android.docx

Microsoft Word - audio_capture_trong_android.docx

Microsoft Word - alert_dialog_trong_android.docx

Microsoft Word - tao_ung_dung_hello_world_trong_android.docx

Microsoft Word - bluetooth_trong_android.docx

Microsoft Word - grid_view_trong_android.docx

Microsoft Word - activity_trong_android.docx

Microsoft Word - fragment_transition_trong_android.docx

Microsoft Word - custom_component_trong_android.docx

Microsoft Word - google_map_trong_android.docx

Microsoft Word - single_fragment_trong_android.docx

Microsoft Word - cai_dat_android_studio.docx

Microsoft Word - su_dung_sqlite_voi_php.docx

Trường Đại học Công nghiệp TpHCM - Thiết kế giao diện - Xử lý sự kiện - Thao tác với menu - Làm việc với Intent - Làm việc với Dialog - Đa ngôn ngữ Bà

Microsoft Word - resource_trong_android.docx

CÀI ĐẶ T ANDROID TRÊN NETBEAN Yêu cầ u:trong quá trình cài đặ t phả i kế t nố i mạ ng,và phiên bả n này đượ c cài trên windows. 1.Download Netbean(6.7

Lập trình và ngôn ngữ lập trình

View, Procedure, Function & Trigger

Microsoft Word - cu_phap_sqlite.docx

Kế thừa

Slide 1

Microsoft Word - jsp_syntax.docx

Microsoft Word - fragment_trong_android.docx

Nhúng mã-cách khai báo biến Nhúng mã-cách khai báo biến Bởi: Khoa CNTT ĐHSP KT Hưng Yên Nhúng mã javascript trong trang HTML Bạn có thể nhúng JavaScri

Stored Procedures Stored Procedures Bởi: Khoa CNTT ĐHSP KT Hưng Yên Trong những bài học trước đây khi dùng Query Analyzer chúng ta có thể đặt tên và s

Tìm hiểu ngôn ngữ lập trình Visual Basic Tìm hiểu ngôn ngữ lập trình Visual Basic Bởi: Khuyet Danh Tìm hiểu ngôn ngữ lập trình Visual Basic Tổng quan

Trường ĐH Khoa Học Tự Nhiên Tp. Hồ Chí Minh TRUNG TÂM TIN HỌC Lập trình Android Bài 2. Các thành phần ứng dụng Ngành Mạng & Thiết bị di động 2014

Những cơ sở của ngôn ngữ C# Những cơ sở của ngôn ngữ C# Bởi: phamvanviet truonglapvy Trong chương này sẽ trình bày về hệ thống kiểu trong C#; phân biệ

Microsoft Word - TN216.doc

Microsoft Word - Huong dan su dung Mailchimp.docx

Microsoft Word - client_request_trong_servlet.docx

Microsoft Word - server_response_trong_servlet.docx

Microsoft Word - session_tracking_trong_servlet.docx

Microsoft Word - status_code_trong_servlet.docx

Bài 3 Tựa bài

PowerPoint Template

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ STORAGE.COM.VN

HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập Tự do Hạnh phúc ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN CÔNG NGHỆ CLI

1 Tạo slide trình diễn với Microsoft Powerpoint Tạo slide trình diễn với Microsoft Powerpoint Người thực hiện Hoàng Anh Tú Phạm Minh Tú Nội dung 1 Mục

Microsoft Word - emulator_trong_android.docx

Slide 1

Cách tạo User và Thiết kế Database Cách tạo User và Thiết kế Database Bởi: Khoa CNTT ĐHSP KT Hưng Yên Cách tạo một User Database Chúng ta có thể tạo m

Microsoft Word - Cau hoi on tap.doc

Bài 4 Tựa bài

HƯỚNG DẪN SỬ DỤNG CÁC SẢN PHẨM CỦA OFFICE 365 Hợp đồng số: 25/KTQD-FPT Cung cấp hệ thống Office trực tuyến và thư điện tử Trường Đại Học Kinh Tế Quốc

Microsoft Word - jsp_client_request.docx

Microsoft Word - action_trong_jsp.docx

Array, Indexer và Collection Array, Indexer và Collection Bởi: phamvanviet truonglapvy Mảng (Array) Mảng là một tập hợp các phần tử có cùng kiểu, được

Trường ĐHBK Hà Nội Khoa Điện Bộ môn Điều khiển Tự động Tài liệu hướng dẫn thực hành: KĨ THUẬT LẬP TRÌNH C/C++ Bài 1: Lập trình cơ sở 1 Mục đích bài th

PowerPoint Presentation

ĐỀ THI GIỮA KỲ MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đề số 1. Thời gian 120 phút (Sinh viên KHÔNG được sử dụng tài liệu hay máy tính ) Xây dựng lớp STRING và

Microsoft Word - xu_ly_cookie_trong_servlet.docx

WICELL User Guide Smart Cloud Wicell Controller Standard Version Manual version

2014 Encyclopædia Britannica, Inc.

Hướng dẫn cụ thể từng bước để đăng ký sử dụng Đơn đăng ký không tín chỉ sau đó ghi danh vào các lớp không tín chỉ. 1 tháng Sáu, 2018 Các sinh viên dự

Câu lệnh (statement) Câu lệnh (statement) Bởi: Khuyet Danh Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình bao gồm nhiều câu

Java cơ bản

Microsoft Word - mot_so_tool_trong_android.docx

Microsoft Word - Bai 7.1.docx

Thực hành trên Rose Thực hành trên Rose Bởi: Đoàn Văn Ban Xây dựng biểu đồ thành phần + Tạo lập mới hoặc mở một biểu đồ thành phần đã được tạo lập trư

OpenStax-CNX module: m Giới thiệu về ngôn ngữ C và môi trường turbo C 3.0 ThS. Nguyễn Văn Linh This work is produced by OpenStax-CNX and licens

IPSec IPSec Bởi: Phạm Nguyễn Bảo Nguyên Chúng ta đã biết khi ta sao chép dữ liệu giữa 2 máy hoặc thông qua mạng VPN để nâng cao chế độ bảo mật người q

CÔNG TY TNHH GIẢI PHÁP TRỰC TUYẾN TOTAL 60 Đường 18, Phường Hiệp Bình Chánh, Quận Thủ Đức, TP.HCM MST:

Truy vấn, Ràng buộc, Trigger Truy vấn, Ràng buộc, Trigger Bởi: Ths. Phạm Hoàng Nhung SQL (Structured Query Language) là ngôn ngữ truy vấn cấu trúc đượ

Microsoft PowerPoint - Bài 4.5.ppt

Lớp và đối tượng-các hàm và các lớp friend Lớp và đối tượng-các hàm và các lớp friend Bởi: Thanh Hiền Vũ CÁC HÀM VÀ CÁC LỚP friend Một hàm friend của

NGÔN NGƯ LÂ P TRIǸH Biên tập bởi: nguyenvanlinh

NGÔN NGỮ THỐNG KÊ R

Copyright vietjack.com Chuỗi (String) trong C# Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký

Bài tập thực hành Chuyên đề 1 CNPM - Java Khoa CNTT- Trường ĐH Công nghệ TP.HCM Lab 01: LẬP TRÌNH JAVA CƠ BẢN VỚI NET BEANS A. MỤC TIÊU: Hướng dẫn tải

Công ty CP công nghệ thẻ NACENCOMM HÓA ĐƠN ĐIỆN TỬ CA2 CÔNG TY CỔ PHẦN CÔNG NGHỆ THẺ NACENCOMM TÀI LIỆU NGHIỆP VỤ HÓA ĐƠN ĐIỆN TỬ CA2 Hà Nội 12/2017 1

Lập trình cấu trúc trong Visual Basic Lập trình cấu trúc trong Visual Basic Bởi: Nguyễn Sơn Học xong chương này, sinh viên phải nắm bắt được các vấn đ

1

Animation, Modules 6 - Hoạt hình, tách file

Bài thực hành 6 trang 106 SGK Tin học 10

Phụ lục 2: HỒ SƠ NĂNG LỰC NĂM 2014

Làm quen với chương trình Microsoft Excel Làm quen với chương trình Microsoft Excel Bởi: unknown Làm quen với chương trình Những thao tác đầu tiên với

Microsoft Word - Lab09 - WebSieuthisach.doc

HỌC VIỆN KỸ THUẬT QUÂN SỰ

Các biến và các kiểu dữ liệu trong JavaScript Các biến và các kiểu dữ liệu trong JavaScript Bởi: Hà Nội Aptech Các biến (Variables) Biến là một tham c

Microsoft Word - Khai thac AWS EC2_Web hosting.docx

Hướng dẫn sử dụng dịch vụ FTP

Hướng dẫn sử dụng 1

Hướng dẫn sử dụng Virtualmin

Microsoft Word - form_trong_html.docx

Microsoft Word - co_ban_ve_jquery.docx

ĐÁP ÁN 150 CÂU HỎI TIN HỌC KỲ THI NÂNG HẠNG GIÁO VIÊN TỈNH QUẢNG NAM 2018 Tác giả: Lê Quang Lưu HĐH là tập hợp các chương trình được tổ

Hàm và lớp template trong Lập trình hướng đối tượng Hàm và lớp template trong Lập trình hướng đối tượng Bởi: unknown Trong phần này, chúng ta tìm hiểu

Microsoft Word - TN DKTD.doc

Microsoft Word - dinh_dang_smartart_trong_powerpoint_2010.docx

Chương 1:

Giới thiệu

Cây nhị phân tìm kiếm Cây nhị phân tìm kiếm Bởi: Trần Hạnh Nhi CÂY NHỊ PHÂN TÌM KIẾM Định nghĩa: Cây nhị phân tìm kiếm (CNPTK) là cây nhị phân trong đ

Hệ điều hành Bài tập tuần 6 1 Quản lý bộ nhớ Bài tập 1 : Xem thông tin bộ nhớ 1. Sử dụng top, ps đọc thông tin về kích thước vùng nhớ của 1 tiến trình

Tài liệu Hướng dẫn sử dụng

BÀI TẬP THỰC HÀNH

TRƢỜNG ĐẠI HỌC DUY TÂN TRUNG TÂM TIN HỌC DUY TÂN ĐỀ CƢƠNG KHẢO SÁT TIN HỌC DÀNH CHO KHỐI KHÔNG CHUYÊN TIN TOÀN TRƢỜNG ÁP DỤNG CHUẨN ỨNG DỤNG KỸ NĂNG C

Bản ghi:

Content Provider trong Android Một thành phần Content Provider cung cấp dữ liệu từ một ứng dụng tới các ứng dụng khác theo yêu cầu. Những yêu cầu này được xử lý bởi các phương thức của lớp ContentResolver. Một Content Provider có thể sử dụng các cách khác nhau để lưu giữ dữ liệu và dữ liệu có thể được lưu giữ trong một cơ sở dữ liệu, một file, hoặc có thể thông qua một mạng.. CONTENTPROVIDER Đôi khi, việc chia sẽ dữ liệu qua các ứng dụng là thực sự cần thiết, khi đó Content Provider trở nên rất hữu ích. Content Provider giúp bạn tập trung nội dung trong một vị trí và có nhiều các ứng dụng khác nhau có thể truy cập nó khi cần thiết. Một Content Provider vận hành khá giống một cơ sở dữ liệu, nơi mà bạn có thể truy vấn nó, sửa đổi nội dung, cũng như thêm hoặc xóa nội dung bởi sử dụng các phương thức insert(), update(), delete() và query(). Trong hầu hết tình huống, dữ liệu này được lưu trữ trong một SQlite database. Một Content Provider được triển khai như là một lớp con của lớp ContentProvider và phải triển khai một tập APIs chuẩn để cho phép các ứng dụng thực hiện các transaction.

public class My Application extends ContentProvider { } Content URI trong Android Để truy vấn một Content Provider, bạn xác định chuỗi truy vấn dạng một URI có định dạng sau: <prefix>://<authority>/<data_type>/<id> Bảng sau giải thích chi tiết các phần của URI: Phần Miêu tả prefix Luôn luôn được thiết lập là content:// authority Xác định tên của Content Provider, ví dụ contacts, browser... Đối với Content Provider bên thứ ba, nó có thể là tên đầy đủ, ví nhưcom.tutorialspoint.statusprovider data_type Chỉ kiểu dữ liệu mà Provider cụ thể cung cấp. Ví dụ, nếu bạn đang lấy tất cả contact từ Content Provider có tên là Contacts, thì dữ liệu sẽ là people và URI sẽ như thế này content://contacts/people id Xác định bản ghi cụ thể được yêu cầu. Ví dụ, nếu bạn đang tìm số số liên hệ thứ 5 trong Coctacts thì URI sẽ như thế này content://contacts/people/5. Tạo Content Provider trong Android Để tạo riêng cho mình một Content Provider, bạn theo 5 bước sau: Đầu tiên, bạn cần tạo một lớp Content Provider mà kế thừa từ lớp cơ sởcontentproviderbaseclass. Thứ hai, bạn cần định nghĩa địa chỉ URI của Content Provider, sẽ được sử dụng để truy cập nội dung đó. Tiếp theo, bạn sẽ cần tạo Database cho riêng bạn để giữ nội dung này. Thường thì, Android sử dụng SQLite Database và framework cần thiết để ghi đè phương thứconcreate() sẻ sử dụng phương thức SQLite Open Helper để tạo và mở

Database của Provider này. Khi ứng dụng của bạn chạy, phương thức oncreate() được gọi trên mỗi luồng ứng dụng chính. Kế tiếp, bạn sẽ phải triển khai các truy vấn Content Provider để thực hiện các hoạt động cơ sở dữ liệu cụ thể. Cuối cùng, đăng ký Content Provider của bạn trong activity file bởi sử dụng thẻ <provider>. Sau đây là danh sách bạn cần ghi đè trong lớp Content Provider: CONTENTPROVIDER oncreate() Phương thức này được gọi khi Provider được bắt đầu. query() Phương thức này nhận một yêu cầu từ người dùng. Kết quả được trả về dưới dạng một đối tượng Cursor. insert()phương thức này chèn một bản ghi mới vào trong Content Provider. delete() Phương thức này xóa một bản ghi đang tồn tại từ Content Provider. update() Phương thức này cập nhật một bản ghi đang tồn tại trong Content Provider. gettype() Phương thức này trả về kiểu MIME của dữ liệu tại URI đã cho.

Ví dụ Ví dụ sau giải thích cách bạn tạo cho riêng mình một ContentProvider. Bạn theo các bước tương tự như khi tạo ví dụ Hello World. Bước Miêu tả 1 Bạn sử dụng Android StudioIDE để tạo một ứng dụng Android có tên My Application dưới một package com.example.my Application, with blank Activity. 2 Sửa đổi MainActivity.java để thêm hai phương thức mới onclickaddname() vàonclickretrievestudents(). 3 Tạo StudentsProvider.java mới dưới package com.example.my Application để định nghĩa Provider của bạn và các phương thức được gắn kết 4 Đăng ký Content Provider trong AndroidManifest.xml file của bạn bởi sử dụng thẻ <provider.../> 5 Sửa đổi nội dung mặc định củares/layout/activity_main.xml để bao một GUI để thêm các bản ghi về student 6 Không cần thiết sửa đổi string.xml file, Android Studio sẽ để ý nó 7 Chạy ứng dụng để chạy Android Emulator và kiểm tra kết quả các thay đổi đã thực hiện trong ứng dụng Sau đây là nội dung của src/com.example.my Application/MainActivity.java. đã được sửa đổi. File này có thể bao các phương thức cơ bản. Chúng ta đã thêm hai phương thứconclickaddname() và onclickretrievestudents() để xử lý tương tác người dùng với ứng dụng. package com.example.my Application; import android.net.uri; import android.os.bundle; import android.app.activity; import android.content.contentvalues; import android.content.cursorloader; import android.database.cursor; import android.view.menu; import android.view.view; import android.widget.edittext; import android.widget.toast; public class MainActivity extends Activity { @Override protected void

oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } @Override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.main, menu); return true; } public void onclickaddname(view view) { // Add a new student record ContentValues values = new ContentValues(); values.put(studentsprovider.name, ((EditText)findViewById(R.id.editText2)).getText().toString()); values.put(studentsprovider.grade, ((EditText)findViewById(R.id.editText3)).getText().toString()); Uri uri = getcontentresolver().insert( StudentsProvider.CONTENT_URI, values); Toast.makeText(getBaseContext(), uri.tostring(), Toast.LENGTH_LONG).show(); } public void onclickretrievestudents(view view) { // Retrieve student records String URL = "content://com.example.provider.college/students"; Uri students = Uri.parse(URL); Cursor c = managedquery(students, null, null, null, "name"); if (c.movetofirst()) { do{ Toast.makeText(this, c.getstring(c.getcolumnindex(studentsprovider._id)) + ", " + c.getstring(c.getcolumnindex( StudentsProvider.NAME)) + ", " + c.getstring(c.getcolumnindex( StudentsProvider.GRADE)), Toast.LENGTH_SHORT).show(); } while (c.movetonext()); } } } Tạo một StudentsProvider.java mới dưới package là com.example.my Application và đây là nội dung của src/com.example.my Application/StudentsProvider.java package com.example.my Application; import java.util.hashmap; import android.content.contentprovider; import android.content.contenturis; import android.content.contentvalues; import android.content.context; import android.content.urimatcher; import android.database.cursor; import android.database.sqlexception; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.database.sqlite.sqlitequerybuilder; import android.net.uri; import android.text.textutils; public class StudentsProvider extends ContentProvider { static final String PROVIDER_NAME = "com.example.provider.college"; static final String URL = "content://" + PROVIDER_NAME + "/students"; static final Uri CONTENT_URI = Uri.parse(URL); static final String _ID = "_id"; static final String NAME = "name"; static final String GRADE = "grade"; private static HashMap<String, String> STUDENTS_PROJECTION_MAP; static final int STUDENTS = 1; static final int STUDENT_ID = 2; static final UriMatcher urimatcher; static{ urimatcher = new UriMatcher(UriMatcher.NO_MATCH); urimatcher.adduri(provider_name, "students", STUDENTS); urimatcher.adduri(provider_name, "students/#", STUDENT_ID); } /** * Database specific constant declarations */ private SQLiteDatabase db; static final String DATABASE_NAME = "College"; static final String STUDENTS_TABLE_NAME = "students"; static final int DATABASE_VERSION = 1; static final String CREATE_DB_TABLE = " CREATE TABLE " + STUDENTS_TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "

name TEXT NOT NULL, " + " grade TEXT NOT NULL);"; /** * Helper class that actually creates and manages * the provider's underlying data repository. */ private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context){ super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void oncreate(sqlitedatabase db) { db.execsql(create_db_table); } @Override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop TABLE IF EXISTS " + STUDENTS_TABLE_NAME); oncreate(db); } } @Override public boolean oncreate() { Context context = getcontext(); DatabaseHelper dbhelper = new DatabaseHelper(context); /** * Create a write able database which will trigger its * creation if it doesn't already exist. */ db = dbhelper.getwritabledatabase(); return (db == null)? false:true; } @Override public Uri insert(uri uri, ContentValues values) { /** * Add a new student record */ long rowid = db.insert( STUDENTS_TABLE_NAME, "", values); /** * If record is added successfully */ if (rowid > 0) { Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowid); getcontext().getcontentresolver().notifychange(_uri, null); return _uri; } throw new SQLException("Failed to add a record into " + uri); } @Override public Cursor query(uri uri, String[] projection, String selection,string[] selectionargs, String sortorder) { SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.settables(students_table_name); switch (urimatcher.match(uri)) { case STUDENTS: qb.setprojectionmap(students_projection_map); case STUDENT_ID: qb.appendwhere( _ID + "=" + break; uri.getpathsegments().get(1)); break; default: throw new IllegalArgumentException("Unknown URI " + uri); } if (sortorder == null sortorder == ""){ /** * By default sort on student names */ sortorder = NAME; } Cursor c = qb.query(db, projection, selection, selectionargs,null, null, sortorder); /** * register to watch a content URI for changes */ c.setnotificationuri(getcontext().getcontentresolver(), uri); return c; } @Override public int delete(uri uri, String selection, String[] selectionargs) { int count = 0; switch (urimatcher.match(uri)){ case STUDENTS: count = db.delete(students_table_name, selection, selectionargs); break; case STUDENT_ID: String id = uri.getpathsegments().get(1); count = db.delete( STUDENTS_TABLE_NAME, _ID + " = " + id + (!TextUtils.isEmpty(selection)? " AND (" + selection + ')' : ""), selectionargs); break; default: throw new IllegalArgumentException("Unknown URI " + uri); } getcontext().getcontentresolver().notifychange(uri, null); return count; } @Override public int update(uri uri, ContentValues values, String selection, String[] selectionargs) { int count = 0; switch (urimatcher.match(uri)){ case STUDENTS: count = db.update(students_table_name, values, selection, selectionargs);

break; case STUDENT_ID: count = db.update(students_table_name, values, _ID + " = " + uri.getpathsegments().get(1) + (" +selection + ')' : ""), selectionargs); break; (!TextUtils.isEmpty(selection)? " AND default: throw new IllegalArgumentException("Unknown URI " + uri ); } getcontext().getcontentresolver().notifychange(uri, null); return count; } @Override public String gettype(uri uri) { switch (urimatcher.match(uri)){ /** * Get all student records */ case STUDENTS: return "vnd.android.cursor.dir/vnd.example.students"; /** * Get a particular student */ case STUDENT_ID: return "vnd.android.cursor.item/vnd.example.students"; default: throw new IllegalArgumentException("Unsupported URI: " + uri); } } } Còn đây là nội dung đã được sửa đổi của AndroidManifest.xml file. Ở đây, chúng ta đã thêm thẻ <provider.../> để bao Content Provider của chúng ta: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.my Application" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="22" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name="com.example.my Application.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <provider android:name="studentsprovider" <android:authorities="com.example.provider.college"> </provider> </application> </manifest> Dưới đây là nội dung của res/layout/activity_main.xml file để bảo một button để phát Custom Intent. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android:paddingbottom="@dimen/activity_vertical_margin" tools:context=".mainactivity"/"> <TextView android:id="@+id/textview1" android:text="content provider" android:layout_alignparenttop="true" android:layout_centerhorizontal="true" android:textsize="30dp" /> <TextView android:id="@+id/textview2"

android:text="tutorials point " android:textcolor="#ff87ff09" android:textsize="30dp" android:layout_below="@+id/textview1" android:layout_centerhorizontal="true" /> <ImageButton android:id="@+id/imagebutton" android:src="@drawable/abc" android:layout_below="@+id/textview2" android:layout_centerhorizontal="true" /> <Button android:id="@+id/button2" android:text="add Name" android:layout_below="@+id/edittext3" android:layout_alignright="@+id/textview2" android:layout_alignend="@+id/textview2" android:layout_alignleft="@+id/textview2" android:layout_alignstart="@+id/textview2" android:onclick="onclickaddname"/> <EditText android:id="@+id/edittext" android:layout_below="@+id/imagebutton" android:layout_alignright="@+id/imagebutton" android:layout_alignend="@+id/imagebutton" /> <EditText android:id="@+id/edittext2" android:layout_aligntop="@+id/edittext" android:layout_alignleft="@+id/textview1" android:layout_alignstart="@+id/textview1" android:layout_alignright="@+id/textview1" android:layout_alignend="@+id/textview1" android:hint="name" android:textcolorhint="@android:color/holo_blue_light" /> <EditText android:id="@+id/edittext3" android:layout_below="@+id/edittext" android:layout_alignleft="@+id/edittext2" android:layout_alignstart="@+id/edittext2" android:layout_alignright="@+id/edittext2" android:layout_alignend="@+id/edittext2" android:hint="grade" android:textcolorhint="@android:color/holo_blue_bright" /> <Button android:text="retrive student" android:id="@+id/button" android:layout_below="@+id/button2" android:layout_alignright="@+id/edittext3" android:layout_alignend="@+id/edittext3" android:layout_alignleft="@+id/button2" android:layout_alignstart="@+id/button2" android:onclick="onclickretrievestudents"/> </RelativeLayout> Đảm bảo bạn có nội dung sau của res/values/strings.xml file: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">my Application</string> <string name="action_settings">settings</string> </resources>;

Chạy ứng dụng Android vừa tạo ở trên. Bây giờ, bạn thử nhập mộtname và Grade của một student và cuối cùng nhấn nút Add Name nó sẽ thêm bản ghi student đó vào trong Database và sẽ hiện một thông báo tại cuối màn hình để hiển thị ContentProvider URI cùng với số bản ghi đã thêm vào Database. Hoạt động này sử dụng phương thức insert(). Bạn thử lặp lại tiến trình này để nhập thêm một số student nữa vào cơ sở dữ liệu của Content Provider.

Một khi bạn đã nhập một số bản ghi vào Database, lúc này, giả sử bạn muốn đề nghị ContentProvider cung cấp cho chúng ta các bản ghi đó. Bạn chỉ cần nhấn nút Retrieve Students, sẽ lấy và hiển thị tất cả bản ghi (từng bản ghi một) theo trình triển khai của phương thức query(). Bạn có thể viết các Activity với các hoạt động cập nhật và xóa bằng cách cung cấp các hàm trong MainActivity.java file và sau đó sửa đổi giao diện UI để có các nút cho các hoạt động update và delete này theo cách tương tự chúng ta đã làm với các hoạt động thêm và đọc.

Theo cách này, bạn có thể sử dụng ContentProvider đang tồn tại là Address Book hoặc bạn có thể sử dụng khái niệm Content Provider để phát triển một ứng dụng hướng cơ sở dữ liệu (Database Oriented) đẹp, ở đó bạn có thể thực hiện tất cả các hoạt động trên cơ sở dữ liệu như read, write, update, và delete như đã giải thích trong ví dụ trên.