public class BookDao extends SQLiteOpenHelper {
private static final String DB_NAME = "book.db" ;
private static final int DB_VERSION = 1 ;
public static final String BOOK_TABLE_NAME = "book" ;
public static final String USER_TABLE_NAME = "user" ;
private static final String BOOK_TABLE = "create table " + BOOK_TABLE_NAME
+ "(_id integer primary key,"
+ "name text)" ;
private static final String USER_TABLE = "create table " + USER_TABLE_NAME
+ "(_id integer primary key,"
+ "name text,"
+ "sex integer)" ;
public BookDao ( Context context) {
super ( context, DB_NAME, null, DB_VERSION) ;
}
@Override
public void onCreate ( SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase. execSQL ( BOOK_TABLE) ;
sqLiteDatabase. execSQL ( USER_TABLE) ;
}
@Override
public void onUpgrade ( SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
public class BookProvider extends ContentProvider {
private static final UriMatcher sUriMatcher = new UriMatcher ( UriMatcher. NO_MATCH) ;
private static final String AUTHORITY = "com.vincent.provider" ;
public static final Uri BOOK_URI = Uri. parse ( "content://" + AUTHORITY + "/book" ) ;
public static final Uri USER_URI = Uri. parse ( "content://" + AUTHORITY + "/user" ) ;
private static final int BOOK_CODE = 0 ;
private static final int USER_CODE = 1 ;
private Context mContext;
private BookDao mBookHelper;
static {
sUriMatcher. addURI ( AUTHORITY, "book" , BOOK_CODE) ;
sUriMatcher. addURI ( AUTHORITY, "user" , USER_CODE) ;
}
private String getTableName ( Uri uri) {
String tableName = null;
switch ( sUriMatcher. match ( uri) ) {
case BOOK_CODE:
tableName = BookDao. BOOK_TABLE_NAME;
break ;
case USER_CODE:
tableName = BookDao. USER_TABLE_NAME;
break ;
default :
break ;
}
return tableName;
}
@Override
public boolean onCreate ( ) {
mContext = getContext ( ) ;
mBookHelper = new BookDao ( mContext) ;
return true ;
}
@Nullable
@Override
public Cursor query ( @NonNull Uri uri, @Nullable String[ ] columns, @Nullable String selection, @Nullable String[ ] selectionArgs, @Nullable String groupBy) {
SQLiteDatabase sqLiteDatabase = mBookHelper. getReadableDatabase ( ) ;
String tableName = getTableName ( uri) ;
if ( tableName == null) {
throw new IllegalArgumentException ( "Unsupported uri " + uri) ;
}
return sqLiteDatabase. query ( tableName, columns, selection, selectionArgs, groupBy, null, null) ;
}
@Nullable
@Override
public String getType ( @NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert ( @NonNull Uri uri, @Nullable ContentValues contentValues) {
SQLiteDatabase sqLiteDatabase = mBookHelper. getWritableDatabase ( ) ;
String tableName = getTableName ( uri) ;
if ( tableName == null) {
throw new IllegalArgumentException ( "Unsupported uri " + uri) ;
}
sqLiteDatabase. insert ( tableName, null, contentValues) ;
mContext. getContentResolver ( ) . notifyChange ( uri, null) ;
return uri;
}
@Override
public int delete ( @NonNull Uri uri, @Nullable String whereClause, @Nullable String[ ] whereArgs) {
SQLiteDatabase sqLiteDatabase = mBookHelper. getWritableDatabase ( ) ;
String tableName = getTableName ( uri) ;
if ( tableName == null) {
throw new IllegalArgumentException ( "Unsupported uri " + uri) ;
}
int count = sqLiteDatabase. delete ( tableName, whereClause, whereArgs) ;
if ( count > 0 ) {
mContext. getContentResolver ( ) . notifyChange ( uri, null) ;
}
return count;
}
@Override
public int update ( @NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String whereClaus, @Nullable String[ ] whereArgs) {
SQLiteDatabase sqLiteDatabase = mBookHelper. getWritableDatabase ( ) ;
String tableName = getTableName ( uri) ;
if ( tableName == null) {
throw new IllegalArgumentException ( "Unsupported uri " + uri) ;
}
int count = sqLiteDatabase. update ( tableName, contentValues, whereClaus, whereArgs) ;
if ( count > 0 ) {
mContext. getContentResolver ( ) . notifyChange ( uri, null) ;
}
return count;
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_main) ;
getContentResolver ( ) . registerContentObserver ( BookProvider. BOOK_URI, true , observer) ;
getContentResolver ( ) . registerContentObserver ( BookProvider. USER_URI, true , observer) ;
delete ( ) ;
}
private void insert ( ) {
ContentValues values = new ContentValues ( ) ;
values. put ( "_id" , 0 ) ;
values. put ( "name" , "android" ) ;
getContentResolver ( ) . insert ( BookProvider. BOOK_URI, values) ;
}
private void delete ( ) {
getContentResolver ( ) . delete ( BookProvider. BOOK_URI, "_id=?" , new String [ ] { String. valueOf ( 0 ) } ) ;
}
private void update ( ) {
ContentValues values = new ContentValues ( ) ;
values. put ( "name" , "ios" ) ;
getContentResolver ( ) . update ( BookProvider. BOOK_URI, values, "_id=?" , new String [ ] { String. valueOf ( 0 ) } ) ;
}
private String query ( ) {
String result = null;
Cursor cursor = getContentResolver ( ) . query ( BookProvider. BOOK_URI, null, null, null, null) ;
if ( cursor != null) {
while ( cursor. moveToNext ( ) ) {
int bookId = cursor. getInt ( cursor. getColumnIndex ( "_id" ) ) ;
String bookName = cursor. getString ( cursor. getColumnIndex ( "name" ) ) ;
result = "bookId = " + bookId + ", bookName = " + bookName;
}
cursor. close ( ) ;
}
return result;
}
@Override
protected void onDestroy ( ) {
getContentResolver ( ) . unregisterContentObserver ( observer) ;
super . onDestroy ( ) ;
}
private ContentObserver observer = new ContentObserver ( new Handler ( ) ) {
@Override
public boolean deliverSelfNotifications ( ) {
return super . deliverSelfNotifications ( ) ;
}
@Override
public void onChange ( boolean selfChange) {
super . onChange ( selfChange) ;
Toast. makeText ( MainActivity. this , "data is changed" , Toast. LENGTH_SHORT) . show ( ) ;
}
} ;
}
< provider
android: process= ":provider"
android: permission= "provider"
android: authorities= "com.vincent.provider"
android: name= ".BookProvider" / >