ContentProvider分析

 

红色部分较重要的

 

	private static final int STUDENTS = 1;
	private static final int STUDENT = 2;
	private static final String TAG = "StudentProvider";
	private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
	private DBOpenHelper dbOpenHelper;
	static{
		matcher.addURI("com.itpc.dbtest04.providers.studentprovider", "student", STUDENTS);
		matcher.addURI("com.itpc.dbtest04.providers.studentprovider", "student/#", STUDENT);
	}
	
	@Override
	public boolean onCreate() {
		dbOpenHelper = new DBOpenHelper(getContext());
		return false;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		switch (matcher.match(uri)) {
		case STUDENTS:
			Log.i(TAG, "STUDENTS");
			return db.query("student", null, null, null, null, null, "id asc");
		case STUDENT:
			Long id = ContentUris.parseId(uri);
			String where = "id = "+id;
			if(selection != null && !"".equals(selection.trim())){
				where += " and " + selection;
			}
			Log.i(TAG, "STUDENT");
			return db.query("student", null, where, selectionArgs, null, null, "id asc");
		default:
			throw new IllegalArgumentException("Unknow Uri:"+uri);
		}
	}

  

 

<provider android:name=".StudentProvider" android:authorities="com.itpc.dbtest04.providers.studentprovider" />

 

ContentResolver resolver = getContext().getContentResolver();
Uri uri = Uri.parse("content://com.itpc.dbtest04.providers.studentprovider/student/2");
Cursor cursor = resolver.query(uri, null, null, null, null);

 

 

  

==========================

 

从C应用往A应用添加一条记录,

用B应用来获得A应用数据的变化

 

 

A应用

 

 

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		switch (matcher.match(uri)) {
		case STUDENTS:
			db.insert("student", null, values);
			//监听数据变化
			getContext().getContentResolver().notifyChange(uri, null);
			Log.i(TAG, "保存成功");
			break;
		default:
			throw new IllegalArgumentException("Unknow uri:"+uri);
		}
		return null;
	}

  

 

 (B)监听的应用

 

 

        Uri uri = Uri.parse("content://com.itpc.providers.studentprovider/student");
        this.getContentResolver().registerContentObserver(uri, true, new StudentContentObserver(new Handler()));



    public final class StudentContentObserver extends ContentObserver{

		public StudentContentObserver(Handler handler) {
			super(handler);
		}

		@Override
		public void onChange(boolean selfChange) {
			Uri uri = Uri.parse("content://com.itpc.providers.studentprovider/student");
			ContentResolver resolver = getApplicationContext().getContentResolver();
			Cursor cursor = resolver.query(uri, null, null, null, "id desc limit 1");
			if(cursor.moveToFirst()){
				String name = cursor.getString(cursor.getColumnIndex("name"));
				Log.i(TAG, "其他应用:"+name);
			}
			
		}
		
		
    	
    }






 

 

C应用代码省略

 

 

你可能感兴趣的:(ContentProvider)