Android 四大基本组件之ContentProvider(查询单个)

一,自定义内容提供者 (查询单个)
 1,写一个MyContentProvider类,继承Contentprovider,实现ContentProvider中的方法
@Override
    public boolean onCreate() {
        Log.i("test","onCreate");
        DbUtil dbUtil = new DbUtil(getContext(), "数据库名", null, 2);
        db = dbUtil.getReadableDatabase();
    }
@Nullable
@Override
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
return db.query(false,"表名",strings,s,strings1,null,null,s1,null);
}


  2,在配置文件中配置基本属性
      <provider
           android:authorities="com.example.android_contentprovider01_PERSON"
            android:name="provider.MyContentProvider"
            android:exported="true"
            >
     </provider>
  3,内容访问者
       
  获得内容访问者
        ContentResolver cr=getContentResoler();
   public void getdata(View view){
    Uri uri = Uri.parse("content://包名");
    //调用MyContentProvider中的方法
    Cursor cursor=cr.query(uri,null,null,null,null);
    while (cursor.moveToNext()){
    int id=cursor.getInt(cursor.getColumnIndex("_id"));
    String name=cursor.getString(cursor.getColumnIndex("name"));
    int age=cursor.getInt(cursor.getColumnIndex("age"));
    Log.i("test",id+" "+name+" "+age);
  }


二.,自定义内容提供者(查询单个使用URI匹配器)
//MyContentProvider类中
@Override
    public boolean onCreate() {
        Log.i("test","onCreate");
        DbUtil dbUtil = new DbUtil(getContext(), "数据库名", null, 2);
        db = dbUtil.getReadableDatabase();

        //实例化URI匹配器
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        //添加规则
        //01.查询所有   
        uriMatcher.addURI("包名","aa",1);
        //02.查询单个   
        uriMatcher.addURI("包名","aa/#",2);
        return false;
    }
   @Nullable
    @Override
    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
    //根据URI匹配器开始匹配Uri
    int code=uriMatcher.match(uri);
    switch (code) {
        case 1:
            //查询所有
        Log.i("test","query所有");
        //获取数据库中所有的数据
        return db.query(false,"aa",strings,s,strings1,null,null,s1,null);
        case 2:
            //查询单个
            //获取# 的值
            long id=ContentUris.parseId(uri);
        Log.i("test","query单个");
        return db.rawQuery("select * from aa where _id=?",new String[]{id+""});
    }
    return null;
}

//内容访问者类中
public void getdata(View view){
//判断输入框的值是否为空
  if(TextUtils.isEmpty(et_main_id.getText().toString())){
        uri = Uri.parse("content://包名/aa);
    }else{
        //查询单个
        //1.直接query传参
        //2.类似web  http://localhost:8080/webProject/xxx.action?id=3
        //3.Uri匹配器
        String id=et_main_id.getText().toString();
        uri = Uri.parse("content://包名/aa#/"+id);
    }
    Cursor cursor=cr.query(uri,null,null,null,null);
    //SimleCursorAdapter
    while (cursor.moveToNext()){
        int id=cursor.getInt(cursor.getColumnIndex("_id"));
        String name=cursor.getString(cursor.getColumnIndex("name"));
        int age=cursor.getInt(cursor.getColumnIndex("age"));
        Log.i("test",id+" "+name+" "+age);
    }
}

}






评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值