• 实现多个ContentProvider对多张表进行操作


    http://blog.csdn.net/maylian7700/article/details/7365373

    SQLite数据库直接操作类:

    DatabaseHelper.java

    1. package com.jacp.database;  
    2.   
    3. import android.content.Context;  
    4. import android.database.sqlite.SQLiteDatabase;  
    5. import android.database.sqlite.SQLiteOpenHelper;  
    6.   
    7. import com.jacp.demo.provider.Provider;  
    8.   
    9. public class DatabaseHelper extends SQLiteOpenHelper {  
    10.     private static final String DATABASE_NAME = "jacp_demo.db";  
    11.     private static final int DATABASE_VERSION = 1;  
    12.   
    13.     public DatabaseHelper(Context context) {  
    14.         super(context, DATABASE_NAME, null, DATABASE_VERSION);  
    15.     }  
    16.   
    17.     @Override  
    18.     public void onCreate(SQLiteDatabase db) {  
    19.         // 创建programmer表  
    20.         db.execSQL("CREATE TABLE " + Provider.ProgrammerColumns.TABLE_NAME + " ("  
    21.                 + Provider.ProgrammerColumns._ID + " INTEGER PRIMARY KEY,"  
    22.                 + Provider.ProgrammerColumns.NAME + " TEXT,"  
    23.                 + Provider.ProgrammerColumns.AGE + " INTEGER"  
    24.                 + ");");  
    25.           
    26.         // 创建leader表  
    27.         db.execSQL("CREATE TABLE " + Provider.LeaderColumns.TABLE_NAME + " ("  
    28.                 + Provider.LeaderColumns._ID + " INTEGER PRIMARY KEY,"  
    29.                 + Provider.LeaderColumns.NAME + " TEXT,"  
    30.                 + Provider.LeaderColumns.TITLE + " TEXT,"  
    31.                 + Provider.LeaderColumns.LEVEL + " INTEGER"  
    32.                 + ");");  
    33.     }  
    34.   
    35.     @Override  
    36.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
    37.         db.execSQL("DROP TABLE IF EXISTS " + Provider.ProgrammerColumns.TABLE_NAME);  
    38.         db.execSQL("DROP TABLE IF EXISTS " + Provider.LeaderColumns.TABLE_NAME);  
    39.         onCreate(db);  
    40.     }  
    41. }  


    保存跟数据库及表有关的常量:
    Provider.java

    1. package com.jacp.demo.provider;  
    2.   
    3. import android.net.Uri;  
    4. import android.provider.BaseColumns;  
    5.   
    6. /** 
    7.  * 保存数据库中的常量 
    8.  * @author jacp 
    9.  * 
    10.  */  
    11. public class Provider {  
    12.       
    13.     public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.jacp.demo";  
    14.   
    15.     public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.jacp.demo";  
    16.   
    17.     /** 
    18.      * 保存programmer表中用到的常量 
    19.      * @author jacp 
    20.      * 
    21.      */  
    22.     public static final class ProgrammerColumns implements BaseColumns {  
    23.         // 注意两张表的authority要不一样  
    24.         public static final String AUTHORITY = "com.jacp.provider.demo.programmer";  
    25.         public static final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/programmers");  
    26.         public static final String TABLE_NAME = "programmer";  
    27.         public static final String DEFAULT_SORT_ORDER = "age desc";  
    28.           
    29.         public static final String NAME = "name";  
    30.         public static final String AGE = "age";  
    31.           
    32.     }  
    33.       
    34.     /** 
    35.      * 保存leader表中用到的常量 
    36.      * @author mayliang 
    37.      * 
    38.      */  
    39.     public static final class LeaderColumns implements BaseColumns {  
    40.         public static final String AUTHORITY = "com.jacp.provider.demo.leader";  
    41.         public static final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/leaders");  
    42.         public static final String TABLE_NAME = "leader";  
    43.         public static final String DEFAULT_SORT_ORDER = "level desc";  
    44.           
    45.         public static final String NAME = "name";  
    46.         public static final String TITLE = "title";  
    47.         public static final String LEVEL = "level";  
    48.           
    49.     }  
    50.       
    51. }  

    对leader表进行增删改查操作的ContentProvider类:

    LeaderProvider.java

    1. package com.jacp.demo.provider;  
    2.   
    3. import java.util.HashMap;  
    4.   
    5. import android.content.ContentProvider;  
    6. import android.content.ContentUris;  
    7. import android.content.ContentValues;  
    8. import android.content.UriMatcher;  
    9. import android.database.Cursor;  
    10. import android.database.SQLException;  
    11. import android.database.sqlite.SQLiteDatabase;  
    12. import android.database.sqlite.SQLiteQueryBuilder;  
    13. import android.net.Uri;  
    14. import android.text.TextUtils;  
    15.   
    16. import com.jacp.database.DatabaseHelper;  
    17.   
    18. /** 
    19.  * 对leader表进行操作的ContentProvider 
    20.  * @author jacp 
    21.  * 
    22.  */  
    23. public class LeaderProvider extends ContentProvider {  
    24.   
    25.     private static HashMap<String, String> sLeadersProjectionMap;  
    26.   
    27.     private static final int LEADERS = 1;  
    28.     private static final int LEADER_ID = 2;  
    29.   
    30.     private static final UriMatcher sUriMatcher;  
    31.   
    32.     private DatabaseHelper mOpenHelper;  
    33.   
    34.     @Override  
    35.     public boolean onCreate() {  
    36.         mOpenHelper = new DatabaseHelper(getContext());  
    37.         return true;  
    38.     }  
    39.   
    40.     @Override  
    41.     public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,  
    42.             String sortOrder) {  
    43.         SQLiteQueryBuilder qb = new SQLiteQueryBuilder();  
    44.         qb.setTables(Provider.LeaderColumns.TABLE_NAME);  
    45.   
    46.         switch (sUriMatcher.match(uri)) {  
    47.         case LEADERS:  
    48.             qb.setProjectionMap(sLeadersProjectionMap);  
    49.             break;  
    50.   
    51.         case LEADER_ID:  
    52.             qb.setProjectionMap(sLeadersProjectionMap);  
    53.             qb.appendWhere(Provider.LeaderColumns._ID + "=" + uri.getPathSegments().get(1));  
    54.             break;  
    55.   
    56.         default:  
    57.             throw new IllegalArgumentException("Unknown URI " + uri);  
    58.         }  
    59.   
    60.         // If no sort order is specified use the default  
    61.         String orderBy;  
    62.         if (TextUtils.isEmpty(sortOrder)) {  
    63.             orderBy = Provider.LeaderColumns.DEFAULT_SORT_ORDER;  
    64.         } else {  
    65.             orderBy = sortOrder;  
    66.         }  
    67.   
    68.         // Get the database and run the query  
    69.         SQLiteDatabase db = mOpenHelper.getReadableDatabase();  
    70.         Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);  
    71.   
    72.         // Tell the cursor what uri to watch, so it knows when its source data changes  
    73.         c.setNotificationUri(getContext().getContentResolver(), uri);  
    74.         return c;  
    75.     }  
    76.   
    77.     @Override  
    78.     public String getType(Uri uri) {  
    79.         switch (sUriMatcher.match(uri)) {  
    80.         case LEADERS:  
    81.             return Provider.CONTENT_TYPE;  
    82.         case LEADER_ID:  
    83.             return Provider.CONTENT_ITEM_TYPE;  
    84.         default:  
    85.             throw new IllegalArgumentException("Unknown URI " + uri);  
    86.         }  
    87.     }  
    88.   
    89.     @Override  
    90.     public Uri insert(Uri uri, ContentValues initialValues) {  
    91.         // Validate the requested uri  
    92.         if (sUriMatcher.match(uri) != LEADERS) {  
    93.             throw new IllegalArgumentException("Unknown URI " + uri);  
    94.         }  
    95.   
    96.         ContentValues values;  
    97.         if (initialValues != null) {  
    98.             values = new ContentValues(initialValues);  
    99.         } else {  
    100.             values = new ContentValues();  
    101.         }  
    102.   
    103.         // Make sure that the fields are all set  
    104.         if (values.containsKey(Provider.LeaderColumns.NAME) == false) {  
    105.             values.put(Provider.LeaderColumns.NAME, "");  
    106.         }  
    107.           
    108.         if (values.containsKey(Provider.LeaderColumns.TITLE) == false) {  
    109.             values.put(Provider.LeaderColumns.TITLE, "");  
    110.         }  
    111.   
    112.         if (values.containsKey(Provider.LeaderColumns.LEVEL) == false) {  
    113.             values.put(Provider.LeaderColumns.LEVEL, 0);  
    114.         }  
    115.   
    116.         SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
    117.         long rowId = db.insert(Provider.LeaderColumns.TABLE_NAME, Provider.LeaderColumns.NAME, values);  
    118.         if (rowId > 0) {  
    119.             Uri noteUri = ContentUris.withAppendedId(Provider.LeaderColumns.CONTENT_URI, rowId);  
    120.             getContext().getContentResolver().notifyChange(noteUri, null);  
    121.             return noteUri;  
    122.         }  
    123.   
    124.         throw new SQLException("Failed to insert row into " + uri);  
    125.     }  
    126.   
    127.     @Override  
    128.     public int delete(Uri uri, String where, String[] whereArgs) {  
    129.         SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
    130.         int count;  
    131.         switch (sUriMatcher.match(uri)) {  
    132.         case LEADERS:  
    133.             count = db.delete(Provider.LeaderColumns.TABLE_NAME, where, whereArgs);  
    134.             break;  
    135.   
    136.         case LEADER_ID:  
    137.             String noteId = uri.getPathSegments().get(1);  
    138.             count = db.delete(Provider.LeaderColumns.TABLE_NAME, Provider.LeaderColumns._ID + "=" + noteId  
    139.                     + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);  
    140.             break;  
    141.   
    142.         default:  
    143.             throw new IllegalArgumentException("Unknown URI " + uri);  
    144.         }  
    145.   
    146.         getContext().getContentResolver().notifyChange(uri, null);  
    147.         return count;  
    148.     }  
    149.   
    150.     @Override  
    151.     public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {  
    152.         SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
    153.         int count;  
    154.         switch (sUriMatcher.match(uri)) {  
    155.         case LEADERS:  
    156.             count = db.update(Provider.LeaderColumns.TABLE_NAME, values, where, whereArgs);  
    157.             break;  
    158.   
    159.         case LEADER_ID:  
    160.             String noteId = uri.getPathSegments().get(1);  
    161.             count = db.update(Provider.LeaderColumns.TABLE_NAME, values, Provider.LeaderColumns._ID + "=" + noteId  
    162.                     + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);  
    163.             break;  
    164.   
    165.         default:  
    166.             throw new IllegalArgumentException("Unknown URI " + uri);  
    167.         }  
    168.   
    169.         getContext().getContentResolver().notifyChange(uri, null);  
    170.         return count;  
    171.     }  
    172.   
    173.     static {  
    174.         sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);  
    175.         sUriMatcher.addURI(Provider.LeaderColumns.AUTHORITY, "leaders", LEADERS);  
    176.         sUriMatcher.addURI(Provider.LeaderColumns.AUTHORITY, "leaders/#", LEADER_ID);  
    177.   
    178.         sLeadersProjectionMap = new HashMap<String, String>();  
    179.         sLeadersProjectionMap.put(Provider.LeaderColumns._ID, Provider.LeaderColumns._ID);  
    180.         sLeadersProjectionMap.put(Provider.LeaderColumns.NAME, Provider.LeaderColumns.NAME);  
    181.         sLeadersProjectionMap.put(Provider.LeaderColumns.TITLE, Provider.LeaderColumns.TITLE);  
    182.         sLeadersProjectionMap.put(Provider.LeaderColumns.LEVEL, Provider.LeaderColumns.LEVEL);  
    183.     }  
    184. }  

    对programmer表进行增删改查操作的ContentProvider类:

    ProgrammerProvider.java

    1. package com.jacp.demo.provider;  
    2.   
    3. import java.util.HashMap;  
    4.   
    5. import android.content.ContentProvider;  
    6. import android.content.ContentUris;  
    7. import android.content.ContentValues;  
    8. import android.content.UriMatcher;  
    9. import android.database.Cursor;  
    10. import android.database.SQLException;  
    11. import android.database.sqlite.SQLiteDatabase;  
    12. import android.database.sqlite.SQLiteQueryBuilder;  
    13. import android.net.Uri;  
    14. import android.text.TextUtils;  
    15.   
    16. import com.jacp.database.DatabaseHelper;  
    17.   
    18. /** 
    19.  * 对programmer表进行操作的ContentProvider 
    20.  * @author jacp 
    21.  * 
    22.  */  
    23. public class ProgrammerProvider extends ContentProvider {  
    24.   
    25.     private static HashMap<String, String> sprogrammersProjectionMap;  
    26.   
    27.     private static final int PROGRAMMERS = 1;  
    28.     private static final int PROGRAMMERS_ID = 2;  
    29.   
    30.     private static final UriMatcher sUriMatcher;  
    31.   
    32.     private DatabaseHelper mOpenHelper;  
    33.   
    34.     @Override  
    35.     public boolean onCreate() {  
    36.         mOpenHelper = new DatabaseHelper(getContext());  
    37.         return true;  
    38.     }  
    39.   
    40.     @Override  
    41.     public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,  
    42.             String sortOrder) {  
    43.         SQLiteQueryBuilder qb = new SQLiteQueryBuilder();  
    44.         qb.setTables(Provider.ProgrammerColumns.TABLE_NAME);  
    45.   
    46.         switch (sUriMatcher.match(uri)) {  
    47.         case PROGRAMMERS:  
    48.             qb.setProjectionMap(sprogrammersProjectionMap);  
    49.             break;  
    50.   
    51.         case PROGRAMMERS_ID:  
    52.             qb.setProjectionMap(sprogrammersProjectionMap);  
    53.             qb.appendWhere(Provider.ProgrammerColumns._ID + "=" + uri.getPathSegments().get(1));  
    54.             break;  
    55.   
    56.         default:  
    57.             throw new IllegalArgumentException("Unknown URI " + uri);  
    58.         }  
    59.   
    60.         // If no sort order is specified use the default  
    61.         String orderBy;  
    62.         if (TextUtils.isEmpty(sortOrder)) {  
    63.             orderBy = Provider.ProgrammerColumns.DEFAULT_SORT_ORDER;  
    64.         } else {  
    65.             orderBy = sortOrder;  
    66.         }  
    67.   
    68.         // Get the database and run the query  
    69.         SQLiteDatabase db = mOpenHelper.getReadableDatabase();  
    70.         Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);  
    71.   
    72.         // Tell the cursor what uri to watch, so it knows when its source data changes  
    73.         c.setNotificationUri(getContext().getContentResolver(), uri);  
    74.         return c;  
    75.     }  
    76.   
    77.     @Override  
    78.     public String getType(Uri uri) {  
    79.         switch (sUriMatcher.match(uri)) {  
    80.         case PROGRAMMERS:  
    81.             return Provider.CONTENT_TYPE;  
    82.         case PROGRAMMERS_ID:  
    83.             return Provider.CONTENT_ITEM_TYPE;  
    84.         default:  
    85.             throw new IllegalArgumentException("Unknown URI " + uri);  
    86.         }  
    87.     }  
    88.   
    89.     @Override  
    90.     public Uri insert(Uri uri, ContentValues initialValues) {  
    91.         // Validate the requested uri  
    92.         if (sUriMatcher.match(uri) != PROGRAMMERS) {  
    93.             throw new IllegalArgumentException("Unknown URI " + uri);  
    94.         }  
    95.   
    96.         ContentValues values;  
    97.         if (initialValues != null) {  
    98.             values = new ContentValues(initialValues);  
    99.         } else {  
    100.             values = new ContentValues();  
    101.         }  
    102.   
    103.         // Make sure that the fields are all set  
    104.         if (values.containsKey(Provider.ProgrammerColumns.NAME) == false) {  
    105.             values.put(Provider.ProgrammerColumns.NAME, "");  
    106.         }  
    107.   
    108.         if (values.containsKey(Provider.ProgrammerColumns.AGE) == false) {  
    109.             values.put(Provider.ProgrammerColumns.AGE, 0);  
    110.         }  
    111.   
    112.         SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
    113.         long rowId = db.insert(Provider.ProgrammerColumns.TABLE_NAME, Provider.ProgrammerColumns.NAME, values);  
    114.         if (rowId > 0) {  
    115.             Uri noteUri = ContentUris.withAppendedId(Provider.ProgrammerColumns.CONTENT_URI, rowId);  
    116.             getContext().getContentResolver().notifyChange(noteUri, null);  
    117.             return noteUri;  
    118.         }  
    119.   
    120.         throw new SQLException("Failed to insert row into " + uri);  
    121.     }  
    122.   
    123.     @Override  
    124.     public int delete(Uri uri, String where, String[] whereArgs) {  
    125.         SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
    126.         int count;  
    127.         switch (sUriMatcher.match(uri)) {  
    128.         case PROGRAMMERS:  
    129.             count = db.delete(Provider.ProgrammerColumns.TABLE_NAME, where, whereArgs);  
    130.             break;  
    131.   
    132.         case PROGRAMMERS_ID:  
    133.             String noteId = uri.getPathSegments().get(1);  
    134.             count = db.delete(Provider.ProgrammerColumns.TABLE_NAME, Provider.ProgrammerColumns._ID + "=" + noteId  
    135.                     + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);  
    136.             break;  
    137.   
    138.         default:  
    139.             throw new IllegalArgumentException("Unknown URI " + uri);  
    140.         }  
    141.   
    142.         getContext().getContentResolver().notifyChange(uri, null);  
    143.         return count;  
    144.     }  
    145.   
    146.     @Override  
    147.     public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {  
    148.         SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
    149.         int count;  
    150.         switch (sUriMatcher.match(uri)) {  
    151.         case PROGRAMMERS:  
    152.             count = db.update(Provider.ProgrammerColumns.TABLE_NAME, values, where, whereArgs);  
    153.             break;  
    154.   
    155.         case PROGRAMMERS_ID:  
    156.             String noteId = uri.getPathSegments().get(1);  
    157.             count = db.update(Provider.ProgrammerColumns.TABLE_NAME, values, Provider.ProgrammerColumns._ID + "=" + noteId  
    158.                     + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);  
    159.             break;  
    160.   
    161.         default:  
    162.             throw new IllegalArgumentException("Unknown URI " + uri);  
    163.         }  
    164.   
    165.         getContext().getContentResolver().notifyChange(uri, null);  
    166.         return count;  
    167.     }  
    168.   
    169.     static {  
    170.         sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);  
    171.         sUriMatcher.addURI(Provider.ProgrammerColumns.AUTHORITY, "programmers", PROGRAMMERS);  
    172.         sUriMatcher.addURI(Provider.ProgrammerColumns.AUTHORITY, "programmers/#", PROGRAMMERS_ID);  
    173.   
    174.         sprogrammersProjectionMap = new HashMap<String, String>();  
    175.         sprogrammersProjectionMap.put(Provider.ProgrammerColumns._ID, Provider.ProgrammerColumns._ID);  
    176.         sprogrammersProjectionMap.put(Provider.ProgrammerColumns.NAME, Provider.ProgrammerColumns.NAME);  
    177.         sprogrammersProjectionMap.put(Provider.ProgrammerColumns.AGE, Provider.ProgrammerColumns.AGE);  
    178.     }  
    179. }  

    保存leader表的数据对象:

    Leader.java

    1. package com.jacp.pojos;  
    2.   
    3. public class Leader {  
    4.   
    5.     public String name;  
    6.     public String title;  
    7.     public int level;  
    8. }  

    保存Programmer表的数据对象:

    Programmer.java

    1. package com.jacp.pojos;  
    2.   
    3. public class Programmer {  
    4.   
    5.     public String name;  
    6.     public int age;  
    7. }  

    Activity测试:

    1. package com.jacp.demo;  
    2.   
    3. import android.app.Activity;  
    4. import android.content.ContentValues;  
    5. import android.database.Cursor;  
    6. import android.net.Uri;  
    7. import android.os.Bundle;  
    8. import android.text.TextUtils;  
    9. import android.util.Log;  
    10.   
    11. import com.jacp.demo.provider.Provider;  
    12. import com.jacp.pojos.Leader;  
    13. import com.jacp.pojos.Programmer;  
    14.   
    15. public class ContentProviderDemoActivity extends Activity {  
    16.       
    17.     private static final String TAG = "ProviderActivity";  
    18.       
    19.     @Override  
    20.     public void onCreate(Bundle savedInstanceState) {  
    21.         super.onCreate(savedInstanceState);  
    22.         setContentView(R.layout.main);  
    23.           
    24.         testLeader();  
    25.         testProgrammer();  
    26.     }  
    27.       
    28.     private void testProgrammer() {  
    29.         Programmer p = new Programmer();  
    30.         p.name = "jacp";  
    31.         p.age = 99;  
    32.         int id = insertProgrammer(p);  
    33.         queryProgrammer(id);  
    34.     }  
    35.       
    36.     private int insertProgrammer(Programmer programmer) {  
    37.         ContentValues values = new ContentValues();  
    38.         values.put(Provider.ProgrammerColumns.NAME, programmer.name);  
    39.         values.put(Provider.ProgrammerColumns.AGE, programmer.age);  
    40.         Uri uri = getContentResolver().insert(Provider.ProgrammerColumns.CONTENT_URI, values);  
    41.         Log.i(TAG, "insert uri="+uri);  
    42.         String lastPath = uri.getLastPathSegment();  
    43.         if (TextUtils.isEmpty(lastPath)) {  
    44.             Log.i(TAG, "insert failure!");  
    45.         } else {  
    46.             Log.i(TAG, "insert success! the id is " + lastPath);  
    47.         }  
    48.           
    49.         return Integer.parseInt(lastPath);  
    50.     }  
    51.       
    52.     private void queryProgrammer(int id) {  
    53.         Cursor c = getContentResolver().query(Provider.ProgrammerColumns.CONTENT_URI, new String[] { Provider.ProgrammerColumns.NAME, Provider.ProgrammerColumns.AGE }, Provider.ProgrammerColumns._ID + "=?", new String[] { id + "" }, null);  
    54.         if (c != null && c.moveToFirst()) {  
    55.             Programmer p = new Programmer();  
    56.             p.name = c.getString(c.getColumnIndexOrThrow(Provider.ProgrammerColumns.NAME));  
    57.             p.age = c.getInt(c.getColumnIndexOrThrow(Provider.ProgrammerColumns.AGE));  
    58.             c.close(); // 用完Cursor要释放资源,如果Cursor没有关闭系统会打出Error级别的Log  
    59.             Log.i(TAG, "programmer.name="+p.name+"---programmer.age="+p.age);  
    60.         } else {  
    61.             Log.i(TAG, "query failure!");  
    62.         }  
    63.     }  
    64.       
    65.     private void testLeader() {  
    66.         Leader leader = new Leader();  
    67.         leader.name = "jacky";  
    68.         leader.title = "CTO";  
    69.         leader.level = 30;  
    70.         int id = insertLeader(leader);  
    71.         queryLeader(id);  
    72.     }  
    73.       
    74.     private int insertLeader(Leader leader) {  
    75.         ContentValues values = new ContentValues();  
    76.         values.put(Provider.LeaderColumns.NAME, leader.name);  
    77.         values.put(Provider.LeaderColumns.TITLE, leader.title);  
    78.         values.put(Provider.LeaderColumns.LEVEL, leader.level);  
    79.         Uri uri = getContentResolver().insert(Provider.LeaderColumns.CONTENT_URI, values);  
    80.         Log.i(TAG, "insert uri="+uri);  
    81.         String lastPath = uri.getLastPathSegment();  
    82.         if (TextUtils.isEmpty(lastPath)) {  
    83.             Log.i(TAG, "insert failure!");  
    84.         } else {  
    85.             Log.i(TAG, "insert success! the id is " + lastPath);  
    86.         }  
    87.           
    88.         return Integer.parseInt(lastPath);  
    89.     }  
    90.       
    91.     private void queryLeader(int id) {  
    92.         Cursor c = getContentResolver().query(Provider.LeaderColumns.CONTENT_URI, new String[] { Provider.LeaderColumns.NAME, Provider.LeaderColumns.TITLE, Provider.LeaderColumns.LEVEL }, Provider.LeaderColumns._ID + "=?", new String[] { id + "" }, null);  
    93.         if (c != null && c.moveToFirst()) {  
    94.             Leader leader = new Leader();  
    95.             leader.name = c.getString(c.getColumnIndexOrThrow(Provider.LeaderColumns.NAME));  
    96.             leader.title = c.getString(c.getColumnIndexOrThrow(Provider.LeaderColumns.TITLE));  
    97.             leader.level = c.getInt(c.getColumnIndexOrThrow(Provider.LeaderColumns.LEVEL));  
    98.             Log.i(TAG, "leader.name="+leader.name+"---leader.title="+leader.title+"---leader.level="+leader.level);  
    99.         } else {  
    100.             Log.i(TAG, "query failure!");  
    101.         }  
    102.     }  
    103. }  

    Manifest.xml文件中的注册(要注意的地方,下面已标注):

    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     package="com.jacp.demo"  
    4.     android:versionCode="1"  
    5.     android:versionName="1.0" >  
    6.   
    7.     <uses-sdk android:minSdkVersion="8" />  
    8.   
    9.     <application  
    10.         android:icon="@drawable/ic_launcher"  
    11.         android:label="@string/app_name" >  
    12.         <activity  
    13.             android:label="@string/app_name"  
    14.             android:name=".ContentProviderDemoActivity" >  
    15.             <intent-filter >  
    16.                 <action android:name="android.intent.action.MAIN" />  
    17.   
    18.                 <category android:name="android.intent.category.LAUNCHER" />  
    19.             </intent-filter>  
    20.         </activity>  
    21.           
    22.         <!-- 这个地方的两个provider的authories要不一样,否则找不到对应ContentProvider处理出现 java.lang.IllegalArgumentException: Unknown URI异常 -->  
    23.         <provider android:name=".provider.ProgrammerProvider"  
    24.             android:authorities="com.jacp.provider.demo.programmer" />  
    25.           
    26.         <provider android:name=".provider.LeaderProvider"  
    27.             android:authorities="com.jacp.provider.demo.leader" />  
    28.     </application>  
    29.   
    30. </manifest>  

    demo下载地址:http://download.csdn.net/detail/maylian7700/4150144

    如有遗漏不当之处,欢迎批评指正!

  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/misybing/p/4966194.html
Copyright © 2020-2023  润新知