自定义ContentProvide访问私有数据

来源:互联网 发布:策略模式 java的概念 编辑:程序博客网 时间:2024/06/07 01:19

通过自定义的ContentProvide可以访问私有数据,系统中也有许多ContentProvide,例如短信,联系人等

创建步骤:

1)先得创建数据库,通过SQLiteOpenHelper创建数据库,在onCreate方法中创建表

public class MySqlit extends SQLiteOpenHelper {

    public MySqlit(Context context) {
        super(context, "people", null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table person(_id integer primary key autoincrement,name char(10),num char(11))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        
    }
}


在MainActivity中

MySqlit sqlit=new MySqlit()

sqlit.getReadableDatabase();

这样就创建了数据表person

2)创建ContentProvide类,继承ContentProvide实现它的方法并重写,同时在xml文件中注册,注册时一定要指定authorities

public class MyProvider extends ContentProvider {
    SQLiteDatabase db;
    @Override
    public boolean onCreate() {
        MySqlit sqlit=new MySqlit(getContext());
        db=sqlit.getReadableDatabase();
        return true;
    }
    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        Cursor cursor=db.query("person", projection, selection, selectionArgs, sortOrder, null, null);
        return cursor;
    }
    @Override
    public String getType(Uri uri) {
        
        return null;
    }
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        
        db.insert("person", null, values);
        return null;
    }
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        int i=db.delete("person", selection, selectionArgs);
        return i;
    }
    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        return 0;
    }
}


这时已经创建了ContentProvide,在其他应用中可以通过ContentResolver来访问数据,并对数据表操作

3)访问数据,操作数据表

插入数据

        ContentResolver result=getContentResolver();
        ContentValues values=new ContentValues();
        values.put("name", "heizi");
        values.put("num", "18829345933");
        result.insert(Uri.parse("content://com.provider"), values);

查询数据

        ContentResolver result=getContentResolver();
        Cursor cursor=result.query(Uri.parse("content://com.provider"), null, null, null, null);
        while(cursor.moveToNext()){
            String name=cursor.getString(0);
            String num=cursor.getString(1);
            System.out.println("name:"+name+"  "+"num:"+num);
        }

4)系统的ContentProvide也可以通过此种凡是来查询,修改等操作

Uri可以到源码里查询

0 0