Android四大组件—ContentProvider

来源:互联网 发布:windows bat脚本sleep 编辑:程序博客网 时间:2024/05/16 23:47

1.内容提供器简介

内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能, 它提供了一套完整的机制,允许一个程序访

问另一个程序中的数据,同时还能保证被访数据 的安全性。目前,使用内容提供器是 Android 实现跨程序共享数据的标准方式。

不同于文件存储和 SharedPreferences 存储中的两种全局可读写操作模式,内容提供器可 以选择只对哪一部分数据进行共享,从而

保证我们程序中的隐私数据不会有泄漏的风险。

内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中 的数据,另一种是创建自己的内容提供器给

我们程序的数据提供外部访问接口。那么接下来 我们就一个一个开始学习吧,首先从使用现有的内容提供器开始。


2.创建一个应用用来被访问数据

1).创建一个类继承ContentProvide

public class BankBackDoor extends ContentProvider {    Open open;    @Override    public boolean onCreate() {        Log.e("main","onCreate");        return false;    }    @Nullable    @Override    public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {        Log.e("main","query");        open=new Open(getContext());        String[] name=new String[]{"潘宇田"};        Cursor cursor=open.sqLiteDatabase.rawQuery("select * from lkh where name=?",name);//        cursor.moveToFirst();//        ArrayList  arrayList=new ArrayList();//        if(cursor.moveToNext()){//        arrayList.add(cursor.getString(2));        //}        return cursor;    }    @Nullable    @Override    public String getType(@NonNull Uri uri) {        Log.e("main","getType");        return null;    }    @Nullable    @Override    public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {        Log.e("main","insert");        open=new Open(getContext());        open.sqLiteDatabase.execSQL("insert into lkh(id,name,age) values (2,'潘宇田','18')");        return null;    }    @Override    public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {        Log.e("main","delete");        return 0;    }    @Override    public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {        Log.e("main","update");        return 0;    }}


2).创建数据库类:

public class Open extends SQLiteOpenHelper {    SQLiteDatabase sqLiteDatabase;    public Open(Context context) {        super(context, "pyt.db", null, 1);        sqLiteDatabase=getWritableDatabase();    }    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {        sqLiteDatabase.execSQL("create table lkh(id integer [not null] [primary key],name text,age text)");    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {    }}


3).在清单中注册Provide:

<provider    android:name="com.zhy.magicviewpager.sample.BankBackDoor"    android:authorities="com.po.oo"    android:exported="true"    >


3.创建另一个应用访问数据:

1).点击事件操作数据库:

button.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {//        ContentResolver resolver=getContentResolver();        Uri uri=Uri.parse("content://com.po.oo");        ContentValues values=new ContentValues();        Cursor cursor=resolver.query(uri,null,null,null,null);        cursor.moveToFirst();        if(cursor.moveToNext()){            String ss=cursor.getString(cursor.getColumnIndex("name"));            Log.e("main",ss);        }    }});


4.得出结果:

12-15 17:07:59.698 14509-14509/com.example.myapplication E/main: 潘宇田




原创粉丝点击