Android四大组件之ContentProvider详解--内容提供者

Android四大组件之ContentProvider详解–内容提供者

实际的开发中,一般也比较少开发自定义的内容提供者,一般都是使用
应用的数据库是不允许其他应用访问的
内容提供者的作用就是让别的应用访问到你的私有数据,就是一个java类
自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法
使用内容提供者可以自己定义访问规则,选择私有数据中哪些共享出去,哪些不共享

  • 什么是Uri
    URI,统一资源标识符
    统一资源标识符用于标示一个抽象或者物理资源,也就是说URI是以一种抽象的,高层次概念定义统一资源标识
    Android的Uri由以下三部分组成: “content://”、数据的路径、标示ID(可选)
    比如content://com.aa.bb.cc/data

  • 什么是UriMatcher
    UriMatcher 类主要用于匹配Uri,匹配Uri的路径

  • 如何使用
  • ContentProvider类,提供内容访问
public class PersonProvider extends ContentProvider {//继承ContentProvider,重写里面的方法
        private SQLiteDatabase db;

        //内容提供者创建时调用
        @Override
        public boolean onCreate() {
            MyOpenHelper oh = new MyOpenHelper(getContext());
            db = oh.getWritableDatabase();
            return false;
        }

        //values:其他应用要插的数据
        @Override
        public Uri insert(Uri uri, ContentValues values) {//插入
            db.insert("person", null, values);//这里的values是调用者传进来的数据,因为我们内容提供者自己肯定不会去插数据的
            return uri;
        }

        @Override
        public int delete(Uri uri, String selection, String[] selectionArgs) {//删除
            int i = 0;
            i = db.delete("person", selection, selectionArgs);
            return i;
        }

        @Override
        public int update(Uri uri, ContentValues values, String selection,
                String[] selectionArgs) {//修改
            int i = db.update("person", values, selection, selectionArgs);
            return i;
        }

        @Override
        public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {//查询
            Cursor cursor = null;
            cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder, null);
            return cursor;
        }

    }
  • 在清单文件中注册
<provider android:name="com.example.contentprovider.PersonProvider"//包名.类名
        android:authorities="com.example.person"//自定义的路径名
        android:exported="true">//允许外部访问
    </provider>
  • 在另一个应用程序中
public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }

        public void insert(View v){
            //通过内容提供者把数据插入01数据库
            //1.获取contentResolver
            ContentResolver resolver = getContentResolver();
            //2.访问内容提供者,插入数据
            ContentValues values = new ContentValues();
            values.put("name", "张三");
            values.put("phone", 123456);
            values.put("money", 10000);
            //arg0:指定内容提供者的主机名
            resolver.insert(Uri.parse("content://com.example.people"), values);

            values.clear();
            values.put("name", "李四");
            values.put("phone", 12345);
            //arg0:指定内容提供者的主机名
            resolver.insert(Uri.parse("content://com.example.people"), values);
        }

        public void delete(View v){
            ContentResolver resolver = getContentResolver();
            int i = resolver.delete(Uri.parse("content://com.example.people"), "name = ?", new String[]{"张三"});
            System.out.println(i);
        }

        public void update(View v){
            ContentResolver resolver = getContentResolver();
            ContentValues values = new ContentValues();
            values.put("money", 10001);
            int i = resolver.update(Uri.parse("content://com.example.people"), values, "name = ?", new String[]{"张三"});
            System.out.println(i);//更新的记录数
        }

        public void query(View v){
            ContentResolver resolver = getContentResolver();
            Cursor cursor = resolver.query(Uri.parse("content://com.example.people"), null, null, null, null);
            while(cursor.moveToNext()){
                String name = cursor.getString(1);
                String phone = cursor.getString(2);
                String money = cursor.getString(3);
                System.out.println(name + ";" + phone + ";" + money);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值