内容提供者编写步骤
1. 写一个类继承系统的ContentProvider
2. 在清单文件中注册
<provider android:name="com.example.bank.BankProvider" android:authorities="tian.wang.gai.di.hu" > </provider>
3. 暗号 URI
static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); static{ //添加URI的匹配规则 matcher.addURI("tian.wang.gai.di.hu", "bao.ta.zhen.he.yao",URI_SUCC); }
4. 实现数据的增删改查的操作
package com.example.bank; import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; /** * 1. 写一个类继承系统的ContentProvider * * 数据库管理员 * 双面间谍 */ public class BankProvider extends ContentProvider { private static final int URI_SUCC = 0; private static final int URI_SUCC_QUERY = 1; private static final int URI_SUCC_ACCOUNT = 2; private static final int URI_SUCC_BALC = 3; private BankDbOpenHelper helper; private SQLiteDatabase db; //3. 暗号 URI static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); static{ //添加URI的匹配规则 matcher.addURI("tian.wang.gai.di.hu", "bao.ta.zhen.he.yao",URI_SUCC); //添加URI的匹配规则 用方法名 query matcher.addURI("tian.wang.gai.di.hu", "query",URI_SUCC_QUERY); //添加URI的匹配规则 用方法名 account 表名 推荐使用 matcher.addURI("tian.wang.gai.di.hu", "account",URI_SUCC_ACCOUNT); //添加URI的匹配规则 用方法名 black 表名 推荐使用 matcher.addURI("tian.wang.gai.di.hu", "black",URI_SUCC_BALC); //添加URI的匹配规则 用方法名 account/2 matcher.addURI("tian.wang.gai.di.hu", "account/2",URI_SUCC_ACCOUNT); /添加URI的匹配规则 用方法名 account/# matcher.addURI("tian.wang.gai.di.hu", "account/#",URI_SUCC_ACCOUNT); } @Override public boolean onCreate() { helper = new BankDbOpenHelper(getContext()); db = helper.getWritableDatabase(); return false; } @Override public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) { int code = matcher.match(uri); if (code == URI_SUCC_QUERY) { Cursor cursor = db.query("account", projection, selection, selectionArgs, null, null, sortOrder); //发出通知 getContext().getContentResolver().notifyChange(uri, null); return cursor; }else if(code == URI_SUCC_BALC){ Cursor cursor = db.query("black", projection, selection, selectionArgs, null, null, sortOrder); return cursor; }else { throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ; } } /** * vnd.android.cursor.item 单行数据 vnd.android.cursor.dir/ 多行数据库 */ @Override public String getType(Uri uri) { return null; } /** * 4. 实现增的方法 * * content://tian.wang.gai.di.hu/bao.ta.zhen.he.yao * */ @Override public Uri insert(Uri uri, ContentValues values) { int code = matcher.match(uri); if (code == URI_SUCC) { //行长操作的数据库 long id = db.insert("account", null, values); //发出通知 getContext().getContentResolver().notifyChange(uri, null); return Uri.parse("id:"+id); }else if(code == URI_SUCC_BALC){ long id = db.insert("black", null, values); return Uri.parse("id:"+id); }else { throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ; } } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int code = matcher.match(uri); if (code == URI_SUCC_ACCOUNT) { int id = db.delete("account", selection, selectionArgs); //发出通知 getContext().getContentResolver().notifyChange(uri, null); return id; }else if(code == URI_SUCC_BALC){ int id = db.delete("black", selection, selectionArgs); return id; }else { throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ; } } @Override public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) { int code = matcher.match(uri); if (code == URI_SUCC_ACCOUNT) { int id = db.update("account", values, selection, selectionArgs); //发出通知 getContext().getContentResolver().notifyChange(uri, null); return id; }else if(code == URI_SUCC_BALC){ int id = db.update("black", values, selection, selectionArgs); return id; }else { throw new IllegalArgumentException("根据相关的法律规定,您无权操作银行数据库!") ; } } }
package com.example.bank; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class BankDbOpenHelper extends SQLiteOpenHelper { /** * 构造方法 * * @param context * 上下文 * @param name * 数据库的名称 * @param factory * 游标工厂 null * @param version * 数据库的版本号 >= 1 */ public BankDbOpenHelper(Context context) { super(context,"bank.db",null,2); } /** * 第一次创建数据库的时候调用 * 适合做一些初始化的事情 */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table account(_id integer primary key autoincrement,name varchar(20),money varchar(20))"); } /** * 升级数据库的时候调用 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("create table black(_id integer primary key autoincrement,name varchar(20),money varchar(20))"); } }
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!