Android -- ContentProvider

简介:

之前写过一个sqlite的博客,传送门:《Android -- Android JUint 与 Sqlite》,这次写的Android四大组件之一的内容提供者,我拿ContentProvider从自己的程序里面读数据。所以需要用到以前的sqlite工程。

在sqlite工程中设置提供Content Provider                                    

新建一个类,继承于ContentProvider

在配置文件中设置:

<provider
            android:name="com.yuyidong.sqlite.PersonDBProvider"
            android:authorities="com.yuyidong.sqlite.personprovider" >
        </provider>
复制代码
public class PersonDBProvider extends ContentProvider {
    
    private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
    private static final int INSERT = 1;
    private static final int DELETE = 21;
    private static final int UPDATE = 3;
    private static final int QUERY = 4;
    private PersonSQLite sqlite;

    static {
        matcher.addURI("com.yuyidong.sqlite.personprovider", "insert", INSERT);
        matcher.addURI("com.yuyidong.sqlite.personprovider", "delete", DELETE);
        matcher.addURI("com.yuyidong.sqlite.personprovider", "update", UPDATE);
        matcher.addURI("com.yuyidong.sqlite.personprovider", "query", QUERY);
    }
    
    
    @Override
    public boolean onCreate() {
        sqlite = new PersonSQLite(getContext());
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        if(matcher.match(uri) == QUERY)
        {
            SQLiteDatabase db = sqlite.getReadableDatabase();
            Cursor  cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
            return cursor;
        }
        else
        {
            throw new IllegalArgumentException("路径不匹配,不能执行查询操作");
        }
        
    }

    @Override
    public String getType(Uri uri) {
        // TODO 自动生成的方法存根
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        // TODO 自动生成的方法存根
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // TODO 自动生成的方法存根
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        // TODO 自动生成的方法存根
        return 0;
    }

}
复制代码

这里static静态块里面的意思就是这个意思:content://com.yuyidong.sqlite.personprovider/insert

这个意思。  

新建工程,用来访问sqlite中的数据库                                             

复制代码
private Button btn_query;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_query = (Button) findViewById(R.id.btn_query);
        btn_query.setOnClickListener(new buttonLisnter());
    }

    class buttonLisnter implements OnClickListener {

        @Override
        public void onClick(View v) {
            ContentResolver resolver = getContentResolver();
            Uri uri = Uri
                    .parse("content://com.yuyidong.sqlite.personprovider/query");
            Cursor cursor = resolver.query(uri, null, null, null, null);
            while (cursor.moveToNext()) {
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String id = cursor.getString(cursor.getColumnIndex("id"));
                System.out.println("name=" + name + "-----id=" + id);
            }

        }

    }
复制代码

点击button之后获取数据。

image

我是天王盖地虎的分割线                                                                

源代码:http://pan.baidu.com/s/1dD1Qx01

ContentProvider4Sqlite1.zip

 

 




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3791015.html,如需转载请自行联系原作者

相关文章
|
4月前
|
数据库 Android开发 开发者
Android Studio入门之内容共享ContentProvider讲解以及实现共享数据实战(附源码 超详细必看)
Android Studio入门之内容共享ContentProvider讲解以及实现共享数据实战(附源码 超详细必看)
41 0
|
4月前
|
数据库 Android开发 Kotlin
android开发,使用kotlin学习ContentProvider
android开发,使用kotlin学习ContentProvider
47 0
|
8月前
|
Java Android开发
Android 四大组件之ContentProvider 访问通讯录进行增删改查操作
Android 四大组件之ContentProvider 访问通讯录进行增删改查操作
51 0
|
8月前
|
API 数据库 Android开发
Android ContentProvider内容提供者详解
Android ContentProvider内容提供者详解
37 2
|
10月前
|
存储 API 数据库
Android:四大组件之 ContentProvider(外共享数据)
数据库在 Android 当中是私有的,不能将数据库设为 WORLD_READABLE,每个数据库都只能允许创建它的包访问。这意味着只有创建这个数据库的应用程序才可访问它。也就是说不能跨越进程和包的边界,直接访问别的应用程序的数据库。那么如何在应用程序间交换数据呢? 如果需要在进程间传递数据,可以使用 ContentProvider 来实现。
212 0
Android:四大组件之 ContentProvider(外共享数据)
|
存储 数据库 Android开发
android中数据存储的contentprovider的使用方法
android中数据存储的contentprovider的使用方法
103 0
|
SQL 存储 自然语言处理
Android | ContentProvider 筑基篇 | 牛气冲天新年征文
Android | ContentProvider 筑基篇 | 牛气冲天新年征文
92 0
Android | ContentProvider 筑基篇 | 牛气冲天新年征文
|
API Android开发 对象存储
Android | 使用 ContentProvider 无侵入获取 Context
Android | 使用 ContentProvider 无侵入获取 Context
348 0
Android | 使用 ContentProvider 无侵入获取 Context
|
存储 缓存 数据库
Android ContentProvider支持跨进程数据共享与&quot;互斥、同步&quot;杂谈
Android ContentProvider支持跨进程数据共享与&quot;互斥、同步&quot;杂谈
502 0
Android ContentProvider支持跨进程数据共享与&quot;互斥、同步&quot;杂谈
|
存储 缓存 安全
Android 面试题之ContentProvider使用+实例
一、什么是ContentProvider 二、什么是Uri 三、什么是ContentResolver 四、创建ContentProvider 五、使用ContentProvider 六、跨应用使用ContentProvider 七、java.lang.SecurityException: Permission Denial: opening provider com.scc.cp.UserProvider from ProcessRecord 源码:ContentProviderDemo.zip
384 0
Android 面试题之ContentProvider使用+实例