Android ContentProvider实现应用间数据共享

在Android 中如果想想要在应用间通信,我们可以使用隐式Intent,BroadcastReceiver,AIDL,ContentProvider。

ContentProvider 是应用程序之间共享数据的接口。使用的时候首先自定义一个类继承ContentProvider,然后覆写query、insert、update、delete 等方法。ContentProvider 是四大组件之一,我们还需要在AndroidManifest 文件中进行注册。

我们先建一个项目用于写入数据,在该项目中定义一个继承ContentProvider的类Myprovider,并在AndroidManifest 中注册

    <provider
            android:authorities="com.zhang.mycp"
            android:name="Myprovider"
            android:exported="true" />

public class Myprovider extends ContentProvider {

    public static final Uri URI = Uri.parse("content://com.zhang.mycp");
    SQLiteDatabase database;

    @Override
    public boolean onCreate() {
        database = getContext().openOrCreateDatabase("mycp.db3", Context.MODE_PRIVATE, null);
        database.execSQL("create table tab(_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL)");
        return true;
    }

    @Nullable
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        Cursor cursor = database.query("tab",null,null,null,null,null,null);
        return cursor;
    }

    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        database.insert("tab","_id",values);
 
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }
}

在MainActivity中写入数据

	ContentValues values = new ContentValues();

        values.put("name","Java");
        getContentResolver().insert(Myprovider.URI,values);

        values.put("name","Swift");
        getContentResolver().insert(Myprovider.URI,values);

        values.put("name","Python");
        getContentResolver().insert(Myprovider.URI,values);

        values.put("name","C#");
        getContentResolver().insert(Myprovider.URI,values);


创建另一个项目用来演示读取数据

     	Uri URI = Uri.parse("content://com.zhang.mycp");
        Cursor cursor = getContentResolver().query(URI, null, null, null, null);

        if (cursor != null) {
            while (cursor.moveToNext()) {
                String value = cursor.getString(cursor.getColumnIndex("name"));
                System.out.println(value + ">>>>>>>>>>>>>>>>>>>>");
            }

            cursor.close();
        }

运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值