首页 > 学院 > 开发设计 > 正文

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

2019-11-11 02:03:04
字体:
来源:转载
供稿:网友

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

 <!--配置内容提供者-->        <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);        }    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表