Android ContentProvider实现应用间数据共享

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

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

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

    

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

运行结果:

Android ContentProvider实现应用间数据共享_第1张图片

你可能感兴趣的:(Android)