ContentProvider(内容提供者)与ContentResolver(内容访问者)

来源:互联网 发布:神话打电话软件 编辑:程序博客网 时间:2024/06/05 13:19

     今天突然想吃披萨,然后上网一搜,哦,附近有家必胜客,就在***,上面显示是九点关门,那我现在去就能吃到。吃披萨的时候突然灵光一现,对了,网站访问流程不正是这个过程吗,网站里的内容正是我想吃的披萨,我要想吃还得知道它的地址,当然有没有关门也是必须的,我得知道网站有没有发布内容呀


 <!--配置内容提供者-->
        <provider
            android:authorities="com.Wwoo0.PERSON"
            android:name="com.Wwoo0.MyContentProvider"
            android:exported="true"
            ></provider>

关于ContentProvider刚刚举了一个小例子作为说明它的原理,其实也就是以上在清单文件中的三个配置名称一个是网址,二是内容,三是是否发布

接下来如何在数据库中创建使用它呢,在这里分享下有关查询方法 

         1.定义类继承ContentProvider,根据需要重写内部方法

   public class MyContentProvider extends ContentProvider {


    private SQLiteDatabase db;
    private UriMatcher uriMatcher;


    @Override
    public boolean onCreate() {
        Log.i("test","onCreate");
        DbUtil dbUtil = new DbUtil(getContext(), "person.db", null, 2);
        db = dbUtil.getReadableDatabase();


        //实例化URI匹配器
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        //添加规则
        //01.查询所有   content://com.zking.g150820_andorid16_sqlite.PERSON/student
        uriMatcher.addURI("com.Wwoo0.PERSON","student",1);
        //02.查询单个   content://com.Wwoo0.PERSON/student/3
        uriMatcher.addURI("com.zking.Wwoo0.PERSON","student/#",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,"student",strings,s,strings1,null,null,s1,null);
            case 2:
                //查询单个
                //获取# 的值
                long id=ContentUris.parseId(uri);
            Log.i("test","query单个");
            return db.rawQuery("select * from student where _id=?",new String[]{id+""});
        }
        return null;
    }


    @Nullable
    @Override
    public String getType(Uri uri) {
        Log.i("test","getType");
        return null;
    }


    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues contentValues) {
        Log.i("test","insert");
        return null;
    }


    @Override
    public int delete(Uri uri, String s, String[] strings) {
        Log.i("test","delete");
        return 0;
    }


    @Override
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
        Log.i("test","update");
        return 0;
    }

        2.有发布者自然有访问者,根据网址进入查询(查询所有或单个查询)

public class ContentResolver extends AppCompatActivity {

    private ContentResolver cr;
    private EditText et_contentresolver_id;
    private Uri uri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contentresolver);
        //获取内容访问者
        cr = getContentResolver();

        et_contentresolver_id = (EditText) findViewById(R.id.et_contentresolver_id);
    }

    public void getData(View view){
        //判断输入框的值是否为空
        if(TextUtils.isEmpty(et_contentresolver_id.getText().toString())){
            //查询所有
            uri = Uri.parse("content://com.Wwoo0.PERSON/student");
        }else{
            //查询单个
            //01.直接query传参
            //02.类似web  http://localhost:8080/webProject/xxx.action?id=3
            //03.Uri匹配器
            String id=et_contentresolver_id.getText().toString();
            uri = Uri.parse("content://com.Wwoo0.PERSON/student/"+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);
        }
    }











1 1
原创粉丝点击