ContentProvider使用示例

ContentProvider使⽤⽰例
国际经济合作contentProvider是Android中提供的专门⽤于不同应⽤间进⾏数据共享⽅式,作为四⼤组件之⼀的contentProvider,使⽤起来⽐较简单,但是因为使⽤频率不是很⾼,所以经常遗忘其使⽤⽅法,所以在次记录下其基本⽤法的实例。
⾸先,有必要对contentProvider的基本原理进⾏⼀个简单的讨论。
contentProvider的底层实现是通过Binder实现,但是他的使⽤⽐aidl要简单很多,因为系统已经为我们做了很多的封装。
系统中也为我们提供了⾮常多的ContentProvider,⽐如通讯录,⽇程表,通话记录等,要跨进程访问这些信息,只需要通过ContentResolver 的query、update、insert、update、insert、delete⽅法即可。
要实现⾃定义ContentProvider,继承ContentProvider类并实现六个抽象⽅法即可,这六个抽象⽅法分别是是:OnCreate、query、update、insert、delete和getType。需要注意的是在这六个⽅法中,除了OnCreate由系统回调并运⾏在主线程⾥,其他五个⽅法均由外界回调并运⾏在Binder线程池中。
下⾯我们⾃定义⼀个BookProvider继承⾃ContentProvider,其代码如下:
public class BookProvider extends ContentProvider {
public static final String TAG = "reoger.hut.hello.word";
public static final String AUTHORLTY = "reoger.hut.hello.word";
public static final Uri BOOK_CONTENT_URI = Uri.parse("content://"+AUTHORLTY+"/book");
public static final Uri USER_CONTENT_URI = Uri.parse("content://"+AUTHORLTY+"/user");
public static final int BOOK_URI_CODE = 0;
public static final int USER_URI_CODE = 1;
private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
private Context mContext;
private SQLiteDatabase mDb;
static {
sUriMatcher.addURI(AUTHORLTY,"book",BOOK_URI_CODE);
sUriMatcher.addURI(AUTHORLTY,"user",USER_URI_CODE);
}
private String getTableName(Uri uri){
String tableName = null;
switch (sUriMatcher.match(uri)){
case BOOK_URI_CODE:
tableName = DbOpenHelper.BOOK_TABLE_NAME;
break;
case USER_URI_CODE:
tableName = DbOpenHelper.USER_TABLE_NAME;
break;
default:
break;
}
return tableName;
}
@Override
public boolean onCreate() {
Log.d(TAG, "onCreate: " + Thread.currentThread());
mContext = getContext();
initProvider();
return true;
}
/**
* 初始化数据库
*/
*/
private void initProvider() {
mDb = new DbOpenHelper(mContext).getWritableDatabase();
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { Log.d(TAG, "query: " + Thread.currentThread().getName());
String table = getTableName(uri);
if(table == null){
throw new IllegalArgumentException(" UnSupported URL: "+uri);
}
return mDb.query(table,projection,selection,selectionArgs,null,null,sortOrder,null);
}
@Nullable
山核桃采摘机@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
加菲盐
Log.d(TAG, "insert: ");
String table = getTableName(uri);
if(table == null ){
throw new IllegalArgumentException("UnSupported URI :"+uri);
tm2007}
mDb.insert(table,null,values);
return uri;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
Log.d(TAG, "delete: ");
String table = getTableName(uri);
if(table == null ){
throw new IllegalArgumentException("UnSupported URI :"+uri);
}
int count = mDb.delete(table,selection,selectionArgs);
if(count>0){
getContext().getContentResolver().notifyChange(uri,null);
}
大丰市实验小学return count;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
Log.d(TAG, "update: ");
String table = getTableName(uri);
if(table == null ){
throw new IllegalArgumentException("UnSupported URI :"+uri);
}
int row = mDb.update(table,values,selection,selectionArgs);
if(row >0 ){
getContext().getContentResolver().notifyChange(uri,null);
}
return row;
}
风行三国}
}
public static final Creator<Book> CREATOR = new Creator<Book>() { @Override
public Book createFromParcel(Parcel in) {
return new Book(in);
}
@Override
public Book[] newArray(int size) {
return new Book[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(name);
}
@Override
public String toString() {
String result = "book = ["+id+
","+name+"];";
return result;
}
}
public class User implements Parcelable {
private int id;
private String name;
private int sex;
public User(int id, String name, int sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
@Override
public String toString() {
return "id= "+id+" ,name ="+name+" ,sex= "+sex;
}
protected User(Parcel in) {
id = in.readInt();
name = in.readString();
sex = in.readInt();
}
public static final Creator<User> CREATOR = new Creator<User>() { @Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override

本文发布于:2024-09-21 14:28:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/24865.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实现   基本   程表   回调   信息   需要   经济   小学
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议