Android—内容提供者

一、什么是内容提供者? 
ContentProvider(内容提供者)是Android中的四大组件之一。ContentProvider为不同的软件之间数据共享,提供统一的接口。 
ContentProvider是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数 
据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。ContentProvider定义一 
个对外开放的接口,从而使得其他的应用可以使用我们自己应用中的文件、数据库内存储的信息。实际开发过程中并不是很常用, 
android系统中的信息,图片库,联系人常用到,但谷歌工程师已经帮我封装好了,我们只需要访问即可。

二、为什么会有内容提供者? 
内容提供者向其它的应用程序提供了一个数据访问的方式,这种方式相对于文件存储共享和sharedpreferences共享数据而言 
的话,它提供了一个统一的数据访问方式,更方便更有效。

三、如何创建一个内容提供者?

首先:写一个类继承Contentprovider,重写六个方法如下实例所示

其次:在AndroidManifest.xml的节点下配置指定name和authorities属性

实例:

package com.sun.administrator.sqlite;  

import android.content.ContentProvider;  
import android.content.ContentValues;  
import android.database.Cursor;  
import android.database.sqlite.SQLiteDatabase;  
import android.net.Uri;  
import android.support.annotation.NonNull;  
import android.support.annotation.Nullable;  
import android.util.Log;  

import com.zking.db.DBHelper;  

/** 
 * Created by Administrator on 2017/7/17 0017. 
 */  

public class MyProvider extends ContentProvider {  
    @Override  
    public boolean onCreate() {  
        Log.i("test","onCreate");  
        return false;  
    }  

    @Nullable  
    @Override  
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {  
        Log.i("test","query");  

        //把数据查询出来  
        DBHelper dbHelper=new DBHelper(getContext(),"test.db",null,1);  
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();  
        //sqLiteDatabase.rawQuery("select * from login",null);  
        return sqLiteDatabase.rawQuery("select * from login",null);  
    }  

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

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

    @Override  
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {  
        Log.i("test","delete");  
        return 0;  
    }  

    @Override  
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {  
        Log.i("test","update");  
        return 0;  
    }  
}  
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

配置信息:` 

package com.sun.administrator.contentresolver;  

import android.content.ContentResolver;  
import android.database.Cursor;  
import android.net.Uri;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.util.Log;  

public class MainActivity extends AppCompatActivity {  

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

        //获取上面一个应用程序的数据  
        //获取内容访问者  
        ContentResolver cr=getContentResolver();  
        Uri uri=Uri.parse("content://com.sun.administrator.sqlite.LOGIN");  
        Cursor cursor=cr.query(uri,null,null,null,null);  
        while(cursor.moveToNext()){  
           int uid=cursor.getInt(cursor.getColumnIndex("uid"));  
            String uname=cursor.getString(cursor.getColumnIndex("uname")) ;  
            String upass=cursor.getString(cursor.getColumnIndex("upass")) ;  
            Log.i("test",uid+" "+uname+" "+upass);  
        }  
    }  
}  
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

小结: ① ContentProvider将应用中的数据对其它应用进行共享, 提供增删改查的方法 
② ContentProvider将数据封装,只暴露出我们希望提供给其它程序的数据 
③ ContentProvider统一了数据的访问方式,不必针对不同数据类型采取不同的访问策略 
④ ContentProvider中可以注册观察者, 监听数据的变化

注意:1、配置信息中name 是完整的类名 
2、authorities是访问Provider时的路径,一定要唯一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值