自定义ContentProvider

本文介绍了一种自定义ContentProvider的方法,并提供了详细的实现步骤。包括如何创建继承ContentProvider的类,配置清单文件,以及如何使用ContentResolver进行增、删、改、查操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.自定义Mycontent继承ContentProvider

public class Mycontent extends ContentProvider{

    private MySqlite helper;
    static UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);
    static{
        matcher.addURI("com.example.china","fatheradd", 0);
        matcher.addURI("com.example.china","fatherdel", 1);
        matcher.addURI("com.example.china","fatherup", 2);
        matcher.addURI("com.example.china","fathersel", 3);
        matcher.addURI("com.example.china","sonadd",4);
        matcher.addURI("com.example.china","sondel",5);
        matcher.addURI("com.example.china","sonup",6);
        matcher.addURI("com.example.china","sonsel",7);
    }
    @Override
    public boolean onCreate() {
        helper = new MySqlite(getContext());
        helper.getWritableDatabase();
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        SQLiteDatabase db = helper.getWritableDatabase();
        Cursor cursor=null;
        switch (matcher.match(uri)) {
        case 3:
            cursor = db.query("father", projection, selection, selectionArgs, null, null, null);
            break;
        case 7:
            cursor = db.query("son", projection, selection, selectionArgs, null, null, null);
            break;

        default:
            break;
        }
        return cursor;
    }

    @Override
    public String getType(Uri uri) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        SQLiteDatabase db = helper.getWritableDatabase();
        switch (matcher.match(uri)) {
        case 0:
            db.insert("father",null, values);
            break;
        case 4:
            db.insert("son",null, values);
            break;

        default:
            break;
        }
        return uri;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        SQLiteDatabase db = helper.getWritableDatabase();
        switch (matcher.match(uri)) {
        case 1:
            db.delete("father", selection, selectionArgs);
            break;
        case 5:
            db.delete("son", selection, selectionArgs);
            break;

        default:
            break;
        }
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {

        return 0;
    }

//配置清单文件

<provider android:name="com.example.content123.Mycontent" android:exported="true" android:authorities="com.example.china"> 
</provider>

//创建数据库兵并初始化几条数据

public class MySqlite extends SQLiteOpenHelper {

    public MySqlite(Context context) {
        super(context, "shiyou.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table father(_id integer primary key autoincrement,name varchar(20),age integer)");
        db.execSQL("create table son(_id integer primary key autoincrement,sex varchar(20),phone varchar(11),uid integer,foreign key(uid) references father(_id))");
        db.execSQL("insert into father(name,age) values('zhangsan',21)");
        db.execSQL("insert into father(name,age) values('lisi',22)");
        db.execSQL("insert into father(name,age) values('wangwu',25)");
        db.execSQL("insert into son(sex,phone,uid) values('男','131455788',1)");
        db.execSQL("insert into son(sex,phone,uid) values('女','111111111',2)");

    }

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

    }

内容提供之创建完毕

通过ContentResolver进行增、删、改、查

public class MainActivity extends Activity implements OnClickListener {

private EditText name;
private EditText age;
private EditText sex;
private EditText num;
private Button add;
private Button del;
private Button up;
private Button sel;
private ContentResolver contentResolver;
private EditText ui;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    contentResolver = getContentResolver();
}

// 初始化控件信息
private void init() {
    name = (EditText) findViewById(R.id.name);
    age = (EditText) findViewById(R.id.age);
    sex = (EditText) findViewById(R.id.sex);
    num = (EditText) findViewById(R.id.num);
    ui = (EditText) findViewById(R.id.ui);
    add = (Button) findViewById(R.id.add);
    del = (Button) findViewById(R.id.del);
    up = (Button) findViewById(R.id.up);
    sel = (Button) findViewById(R.id.sel);
    // 绑定监听
    add.setOnClickListener(this);
    del.setOnClickListener(this);
    up.setOnClickListener(this);
    sel.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    String uid = ui.getText().toString();
    String ename = name.getText().toString();
    String eage = age.getText().toString();
    String esex = sex.getText().toString();
    String pnum = num.getText().toString();
    ContentValues values = new ContentValues();
    switch (v.getId()) {
    case R.id.add:
        values.put("sex", esex);
        values.put("phone", pnum);
        values.put("uid", Integer.parseInt(uid));
        contentResolver.insert(
                Uri.parse("content://com.example.china/sonadd"), values);
        break;
    case R.id.del:
        contentResolver.delete(
                Uri.parse("content://com.example.china/fatherdel"),
                "name=?", new String[] { ename });
        break;
    case R.id.up:
        //contentResolver.update("content://com.example.china/sonup", values, where, selectionArgs)
        break;
    case R.id.sel:

        break;

    default:
        break;
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值