内容提供访问者

ContentProvider内容提供者 存在:数据库
ContentResolver内容访问者

ContentProvider是安卓的四大组件之一,用来共享应用程序内的数据,当你需要把你的数据分享给其他应用的时候才需要组件对外提供其他应用,如果通过内容提供者而让数据暴露。不管程序是否启动,都是可以访问到的。

这是在学习的时候写的一个小demo, ContentProvider首先在内容提供者的程序中要写一个帮助类,创建所需要的表,字段,
这里写图片描述

public class DbHelper extends SQLiteOpenHelper {
    /**
     *
     * @param context  上下文
     * @param name     数据库名字(数据库文件名)
     * @param factory  数据库工厂 (null)
     * @param version 数据库版本(1.0  一个表)   2.0(两个表)
     */
    public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        Log.i("test","DbHelper构造");
    }

    /**
     * 创建表的操作
     * @param sqLiteDatabase
     */
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        Log.i("test","创建表");
        sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,pname,page)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        Log.i("test","onUpgrade");
    }
}

在provider中继承ContentProvider, //实例化URI匹配器
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
给匹配器中添加匹配规则,在方法中实现匹配

   public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
        Log.i("test","query");

        //开始匹配
        int code=uriMatcher.match(uri);
        switch (code) {
            case 0:
                //查询所有
                c = db.query(false,"person",strings,s,strings1,null,null,s1,null);
                return c;
            case 1:
                //得到#的值
                long id=ContentUris.parseId(uri);
                //查询单个:
                c= db.query(false,"person",strings,"_id=?",new String[]{id+""},null,null,s1,null);
                return c;
        }
        return null;
    }

在清单文件中配置


        <provider
            android:authorities="com.zking.android_sqlite.MY"
            android:name=".provider.MyProvider"
            android:exported="true"
            ></provider>

在ContentResolver 方法中获取另外一个类中的方法

  //得到内容访问者
        contentResolver = getContentResolver();

        lv_main_list = (ListView) findViewById(R.id.lv_main_list);
        et_main_id = (EditText) findViewById(R.id.et_main_id);

        //适配器

        adapter = new SimpleCursorAdapter(this, R.layout.item_listview,cursor,new String[]{"_id","pname","page"},new int[]{R.id.iv_item_listview_id,R.id.iv_item_listview_name,R.id.iv_item_listview_age});

        lv_main_list.setAdapter(adapter);
    }

    public void query(View view) {
        if (TextUtils.isEmpty(et_main_id.getText())) {
            //查询所有
//            et_main_id.setError("不能为空");
            uri = Uri.parse("content://com.zking.android_sqlite.MY/persons");
        } else {
            String id = et_main_id.getText().toString();
            //查询单个
            uri = Uri.parse("content://com.zking.android_sqlite.MY/persons/" + id);
        }

        //查询
        cursor = contentResolver.query(uri, null, null, null, null);

        //通知适配器发生改变
        adapter.changeCursor(cursor);
        //adapter.notifyDataSetChanged();
    }

网上还有很多这样的案列这里就不多说了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值