Content provider là một thành phần để quản lý truy cập dữ liệu, nó cung cấp các phương thức khác nhau để các ứng dụng có thể truy cập dữ liệu từ một ứng dụng khác bằng cách sử dụng ContentResolver.
Content Provider có thể giúp cho một ứng dụng quản lý quyền truy cập đến dữ liệu được lưu bởi ứng dụng đó, hoặc các ứng dụng khác, và đó là một cách để ta có thể chia sẻ dữ liệu cho các ứng dụng khác nhau. Hình dưới đây biểu diễn cho việc cách content providers quản lý việc truy cập tới bộ nhớ
Content Provider điều phối việc truy cập tới bỗ lưu trữ dữ liệu thông qua các API và các component như hình dưới, nó bao gồm
Content Provider hoạt động rất giống với một cơ sở dữ liệu, bạn có thể truy vấn, chỉnh sửa nội dung, cũng như là thêm xóa các nội dung sử dụng các phương thức: insert(), update(), delete(), query().
Để sử dụng Content Provider ta làm theo các bước sau:
Các phương thức cần được Override trong lớp Content Provider:
Ví dụ đoạn code sau sẽ sử dụng để mở CSDL ở bảng Student
public class SampleProvider extends ContentProvider {
private SampleDBHelper mDBHelper;
private SQLiteDatabase mDatabase;
@Override
public boolean onCreate() {
// Khoi tao SampleDBHelper o ham onCreate, voi context lay tu method getContext()
mDBHelper = new SampleDBHelper(getContext());
return true;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
mDatabase = mDBHelper.getReadableDatabase();
// Truy van CSDL
return mDatabase.query(SampleDBHelper.TABLE_STUDENT, projection, selection,
selectionArgs, null, null, sortOrder);
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
return 0;
}
}
Content URI là một URI định danh dữ liệu trong một provider. Content URI bao gồm kí hiệu tên của toàn bộ provider và một tên chỉ tới một bảng. Khi bạn gọi một phương thức truy cập tới bảng trong provider thì Content URI của bảng đó là sẽ là một tham số. Để truy vấn data qua provider, ta sẽ sử dụng URI có định dạng như sau:
content://authority/path/id
Ví dụ như để lấy danh sách các liên hệ trong danh bạ thì URI sẽ là content://contacts/people.
id: chỉ định rõ một bản ghi trong tập hợp dữ liệu, mỗi bản ghi sẽ được đánh dấu id là một số duy nhất.
Một số ví dụ về URI:
Content://media/internal/images – trả về List tất cả các ảnh lưu trong thiết bị
Content://contact/people – Trả về list tất cả các tên trong danh bạ
Content://contact/people/45 – Trả về một kết quả danh bạ có ID là 45
Unpublished comment
Viết câu trả lời