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


运行结果:



 

posted @ 2016-11-19 23:08  changchou  阅读(328)  评论(0编辑  收藏  举报