Android四大组件—ContentProvider

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;
    }
}


扫描二维码关注公众号,回复: 3879120 查看本文章

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: 潘宇田




猜你喜欢

转载自blog.csdn.net/Pan_YT/article/details/78814922
今日推荐